diff options
Diffstat (limited to 'packages/migrations/artifacts/2.0.0/TestSignatureValidator.json')
-rw-r--r-- | packages/migrations/artifacts/2.0.0/TestSignatureValidator.json | 66 |
1 files changed, 49 insertions, 17 deletions
diff --git a/packages/migrations/artifacts/2.0.0/TestSignatureValidator.json b/packages/migrations/artifacts/2.0.0/TestSignatureValidator.json index 5879889dd..0fbfb4e1a 100644 --- a/packages/migrations/artifacts/2.0.0/TestSignatureValidator.json +++ b/packages/migrations/artifacts/2.0.0/TestSignatureValidator.json @@ -4,6 +4,20 @@ "compilerOutput": { "abi": [ { + "constant": true, + "inputs": [], + "name": "EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH", + "outputs": [ + { + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { "constant": false, "inputs": [ { @@ -191,6 +205,20 @@ { "constant": true, "inputs": [], + "name": "EIP712_DOMAIN_HASH", + "outputs": [ + { + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], "name": "currentContextAddress", "outputs": [ { @@ -206,15 +234,15 @@ "evm": { "bytecode": { "linkReferences": {}, - "object": "0x608060405234801561001057600080fd5b50611624806100206000396000f3006080604052600436106100985763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633683ef8e811461009d578063642f2eaf146100bf57806377fcce68146100f55780637b8e35141461011557806382c174d0146101355780639363470214610155578063abba41cc14610175578063bfc8bfce14610195578063eea086ba146101b5575b600080fd5b3480156100a957600080fd5b506100bd6100b83660046112ba565b6101d7565b005b3480156100cb57600080fd5b506100df6100da36600461127d565b6102a3565b6040516100ec919061148d565b60405180910390f35b34801561010157600080fd5b506100bd61011036600461122f565b6102b8565b34801561012157600080fd5b506100df6101303660046111f5565b6102fd565b34801561014157600080fd5b506100df61015036600461129b565b61031d565b34801561016157600080fd5b506100df610170366004611322565b61033a565b34801561018157600080fd5b506100df610190366004611322565b610b12565b3480156101a157600080fd5b506100bd6101b0366004611387565b610b27565b3480156101c157600080fd5b506101ca610e59565b6040516100ec919061147f565b610212848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284375061033a945050505050565b60408051808201909152601181527f494e56414c49445f5349474e415455524500000000000000000000000000000060208201529015156102725760405160e560020a62461bcd0281526004016102699190611526565b60405180910390fd5b505050600091825260208281526040808420600160a060020a0390931684529190529020805460ff19166001179055565b60026020526000908152604090205460ff1681565b60006102c2610e68565b600160a060020a03908116600090815260016020908152604080832096909316825294909452909220805460ff191691151591909117905550565b600160209081526000928352604080842090915290825290205460ff1681565b600060208181529281526040808220909352908152205460ff1681565b6000806000806000806000808851116040805190810160405280601e81526020017f4c454e4754485f475245415445525f5448414e5f305f524551554952454400008152509015156103a25760405160e560020a62461bcd0281526004016102699190611526565b506103ac88610e97565b60f860020a900460ff1660088111156103c157fe5b955060008660088111156103d157fe5b141561042557604080518082018252601181527f5349474e41545552455f494c4c4547414c0000000000000000000000000000006020820152905160e560020a62461bcd0281526102699190600401611526565b600186600881111561043357fe5b141561049b57875160408051808201909152601181527f4c454e4754485f315f5245515549524544000000000000000000000000000000602082015290156104915760405160e560020a62461bcd0281526004016102699190611526565b5060009650610b05565b60028660088111156104a957fe5b14156105b157875160408051808201909152601281527f4c454e4754485f36365f524551554952454400000000000000000000000000006020820152906041146105095760405160e560020a62461bcd0281526004016102699190611526565b5087600081518110151561051957fe5b016020015160f860020a908190048102049450610537886001610f4c565b9350610544886021610f4c565b925060018a8686866040516000815260200160405260405161056994939291906114f1565b60206040516020810390808403906000865af115801561058d573d6000803e3d6000fd5b5050604051601f190151600160a060020a038b81169082161498509250610b059050565b60038660088111156105bf57fe5b141561076b57875160408051808201909152601281527f4c454e4754485f36365f5245515549524544000000000000000000000000000060208201529060411461061f5760405160e560020a62461bcd0281526004016102699190611526565b5087600081518110151561062f57fe5b016020015160f860020a90819004810204945061064d886001610f4c565b935061065a886021610f4c565b925060016040805190810160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152508b6040516020018083805190602001908083835b602083106106c75780518252601f1990920191602091820191016106a8565b51815160209384036101000a600019018019909216911617905292019384525060408051808503815293820190819052835193945092839250908401908083835b602083106107275780518252601f199092019160209182019101610708565b51815160209384036101000a6000190180199092169116179052604080519290940182900382206000835291019283905261056994509250899189915088906114f1565b600486600881111561077957fe5b14156107eb57875160408051808201909152601181527f4c454e4754485f315f5245515549524544000000000000000000000000000000602082015290156107d75760405160e560020a62461bcd0281526004016102699190611526565b50600160a060020a03891633149650610b05565b60058660088111156107f957fe5b141561089f576040517f1626ba7e000000000000000000000000000000000000000000000000000000008152600160a060020a038a1690631626ba7e90610846908d908c906004016114d1565b602060405180830381600087803b15801561086057600080fd5b505af1158015610874573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610898919081019061125f565b9650610b05565b60068660088111156108ad57fe5b1415610940576108bc88610fe0565b600160a060020a03808b1660009081526001602090815260408083209385168352929052205490915060ff1615156108f75760009650610b05565b6040517f93634702000000000000000000000000000000000000000000000000000000008152600160a060020a03821690639363470290610846908d908d908d9060040161149b565b600786600881111561094e57fe5b141561097f5760008a815260208181526040808320600160a060020a038d16845290915290205460ff169650610b05565b600886600881111561098d57fe5b1415610a7857875160408051808201909152601281527f4c454e4754485f36365f524551554952454400000000000000000000000000006020820152906041146109ed5760405160e560020a62461bcd0281526004016102699190611526565b508760008151811015156109fd57fe5b016020015160f860020a908190048102049450610a1b886001610f4c565b9350610a28886021610f4c565b604080518082018252601b8082527f19457468657265756d205369676e6564204d6573736167653a0a4100000000006020808401918252935194975060019492938f9301918291908083836106c7565b6007866008811115610a8657fe5b1415610ab75760008a815260208181526040808320600160a060020a038d16845290915290205460ff169650610b05565b604080518082018252601581527f5349474e41545552455f554e535550504f5254454400000000000000000000006020820152905160e560020a62461bcd0281526102699190600401611526565b5050505050509392505050565b6000610b1f84848461033a565b949350505050565b60035460408051808201909152601281527f5245454e5452414e43595f494c4c4547414c00000000000000000000000000006020820152600091600160a060020a031615610b8b5760405160e560020a62461bcd0281526004016102699190611526565b5030868887876040516020018086600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140185600160a060020a0316600160a060020a03166c010000000000000000000000000281526014018481526020018383808284378201915050955050505050506040516020818303038152906040526040518082805190602001908083835b60208310610c3c5780518252601f199092019160209182019101610c1d565b51815160209384036101000a60001901801990921691161790526040805192909401829003822060008181526002835285902054838601909552600f83527f494e56414c49445f54585f48415348000000000000000000000000000000000091830191909152955093505060ff16159050610ccd5760405160e560020a62461bcd0281526004016102699190611526565b50600160a060020a0386163314610d9a57610d19818785858080601f0160208091040260200160405190810160405280939291908181526020018383808284375061033a945050505050565b60408051808201909152601481527f494e56414c49445f54585f5349474e41545552450000000000000000000000006020820152901515610d705760405160e560020a62461bcd0281526004016102699190611526565b506003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0388161790555b60008181526002602052604090819020805460ff191660011790555130908690869080838380828437820191505092505050600060405180830381855af460408051808201909152601081527f4641494c45445f455845435554494f4e000000000000000000000000000000006020820152925015159050610e325760405160e560020a62461bcd0281526004016102699190611526565b50506003805473ffffffffffffffffffffffffffffffffffffffff19169055505050505050565b600354600160a060020a031681565b6003546000908190600160a060020a031615610e8f57600354600160a060020a0316610e91565b335b92915050565b600080825111606060405190810160405280602181526020017f475245415445525f5448414e5f5a45524f5f4c454e4754485f5245515549524581526020017f4400000000000000000000000000000000000000000000000000000000000000815250901515610f1d5760405160e560020a62461bcd0281526004016102699190611526565b50815182906000198101908110610f3057fe5b01602001518251600019019092525060f860020a908190040290565b60008160200183511015606060405190810160405280602681526020017f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f524581526020017f5155495245440000000000000000000000000000000000000000000000000000815250901515610fd65760405160e560020a62461bcd0281526004016102699190611526565b5050016020015190565b6000601482511015606060405190810160405280602681526020017f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524581526020017f51554952454400000000000000000000000000000000000000000000000000008152509015156110685760405160e560020a62461bcd0281526004016102699190611526565b50611077826014845103611084565b8251601319019092525090565b60008160140183511015606060405190810160405280602681526020017f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524581526020017f515549524544000000000000000000000000000000000000000000000000000081525090151561110e5760405160e560020a62461bcd0281526004016102699190611526565b50500160140151600160a060020a031690565b600061112d823561158a565b9392505050565b600061112d8235611596565b600061112d8251611596565b600061112d823561159b565b600080601f8301841361116a57600080fd5b50813567ffffffffffffffff81111561118257600080fd5b60208301915083600182028301111561119a57600080fd5b9250929050565b6000601f820183136111b257600080fd5b81356111c56111c08261155e565b611537565b915080825260208301602083018583830111156111e157600080fd5b6111ec8382846115a4565b50505092915050565b6000806040838503121561120857600080fd5b60006112148585611121565b925050602061122585828601611121565b9150509250929050565b6000806040838503121561124257600080fd5b600061124e8585611121565b925050602061122585828601611134565b60006020828403121561127157600080fd5b6000610b1f8484611140565b60006020828403121561128f57600080fd5b6000610b1f848461114c565b600080604083850312156112ae57600080fd5b6000611214858561114c565b600080600080606085870312156112d057600080fd5b60006112dc878761114c565b94505060206112ed87828801611121565b935050604085013567ffffffffffffffff81111561130a57600080fd5b61131687828801611158565b95989497509550505050565b60008060006060848603121561133757600080fd5b6000611343868661114c565b935050602061135486828701611121565b925050604084013567ffffffffffffffff81111561137157600080fd5b61137d868287016111a1565b9150509250925092565b600080600080600080608087890312156113a057600080fd5b60006113ac898961114c565b96505060206113bd89828a01611121565b955050604087013567ffffffffffffffff8111156113da57600080fd5b6113e689828a01611158565b9450945050606087013567ffffffffffffffff81111561140557600080fd5b61141189828a01611158565b92509250509295509295509295565b6114298161158a565b82525050565b61142981611596565b6114298161159b565b600061144c82611586565b8084526114608160208601602086016115b0565b611469816115e0565b9093016020019392505050565b6114298161159e565b60208101610e918284611420565b60208101610e91828461142f565b606081016114a98286611438565b6114b66020830185611420565b81810360408301526114c88184611441565b95945050505050565b604081016114df8285611438565b8181036020830152610b1f8184611441565b608081016114ff8287611438565b61150c6020830186611476565b6115196040830185611438565b6114c86060830184611438565b6020808252810161112d8184611441565b60405181810167ffffffffffffffff8111828210171561155657600080fd5b604052919050565b600067ffffffffffffffff82111561157557600080fd5b506020601f91909101601f19160190565b5190565b600160a060020a031690565b151590565b90565b60ff1690565b82818337506000910152565b60005b838110156115cb5781810151838201526020016115b3565b838111156115da576000848401525b50505050565b601f01601f1916905600a265627a7a723058204abd33daf80ad2d2d4eec305c76ac9a479ed80ebc3a5671baa990a732a53a98f6c6578706572696d656e74616cf50037", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1624 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x98 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x3683EF8E DUP2 EQ PUSH2 0x9D JUMPI DUP1 PUSH4 0x642F2EAF EQ PUSH2 0xBF JUMPI DUP1 PUSH4 0x77FCCE68 EQ PUSH2 0xF5 JUMPI DUP1 PUSH4 0x7B8E3514 EQ PUSH2 0x115 JUMPI DUP1 PUSH4 0x82C174D0 EQ PUSH2 0x135 JUMPI DUP1 PUSH4 0x93634702 EQ PUSH2 0x155 JUMPI DUP1 PUSH4 0xABBA41CC EQ PUSH2 0x175 JUMPI DUP1 PUSH4 0xBFC8BFCE EQ PUSH2 0x195 JUMPI DUP1 PUSH4 0xEEA086BA EQ PUSH2 0x1B5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBD PUSH2 0xB8 CALLDATASIZE PUSH1 0x4 PUSH2 0x12BA JUMP JUMPDEST PUSH2 0x1D7 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDF PUSH2 0xDA CALLDATASIZE PUSH1 0x4 PUSH2 0x127D JUMP JUMPDEST PUSH2 0x2A3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xEC SWAP2 SWAP1 PUSH2 0x148D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x101 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBD PUSH2 0x110 CALLDATASIZE PUSH1 0x4 PUSH2 0x122F JUMP JUMPDEST PUSH2 0x2B8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x121 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDF PUSH2 0x130 CALLDATASIZE PUSH1 0x4 PUSH2 0x11F5 JUMP JUMPDEST PUSH2 0x2FD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x141 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDF PUSH2 0x150 CALLDATASIZE PUSH1 0x4 PUSH2 0x129B JUMP JUMPDEST PUSH2 0x31D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x161 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDF PUSH2 0x170 CALLDATASIZE PUSH1 0x4 PUSH2 0x1322 JUMP JUMPDEST PUSH2 0x33A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x181 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDF PUSH2 0x190 CALLDATASIZE PUSH1 0x4 PUSH2 0x1322 JUMP JUMPDEST PUSH2 0xB12 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBD PUSH2 0x1B0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1387 JUMP JUMPDEST PUSH2 0xB27 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1CA PUSH2 0xE59 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xEC SWAP2 SWAP1 PUSH2 0x147F JUMP JUMPDEST PUSH2 0x212 DUP5 DUP5 DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x33A SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x11 DUP2 MSTORE PUSH32 0x494E56414C49445F5349474E4154555245000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 ISZERO ISZERO PUSH2 0x272 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP4 AND DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C2 PUSH2 0xE68 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP7 SWAP1 SWAP4 AND DUP3 MSTORE SWAP5 SWAP1 SWAP5 MSTORE SWAP1 SWAP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 DUP2 MSTORE SWAP3 DUP2 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 MSTORE SWAP1 DUP2 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP9 MLOAD GT PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4C454E4754485F475245415445525F5448414E5F305F52455155495245440000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x3A2 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST POP PUSH2 0x3AC DUP9 PUSH2 0xE97 JUMP JUMPDEST PUSH1 0xF8 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x8 DUP2 GT ISZERO PUSH2 0x3C1 JUMPI INVALID JUMPDEST SWAP6 POP PUSH1 0x0 DUP7 PUSH1 0x8 DUP2 GT ISZERO PUSH2 0x3D1 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x425 JUMPI PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x11 DUP2 MSTORE PUSH32 0x5349474E41545552455F494C4C4547414C000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH2 0x269 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x1526 JUMP JUMPDEST PUSH1 0x1 DUP7 PUSH1 0x8 DUP2 GT ISZERO PUSH2 0x433 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x49B JUMPI DUP8 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x11 DUP2 MSTORE PUSH32 0x4C454E4754485F315F5245515549524544000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 ISZERO PUSH2 0x491 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST POP PUSH1 0x0 SWAP7 POP PUSH2 0xB05 JUMP JUMPDEST PUSH1 0x2 DUP7 PUSH1 0x8 DUP2 GT ISZERO PUSH2 0x4A9 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x5B1 JUMPI DUP8 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x12 DUP2 MSTORE PUSH32 0x4C454E4754485F36365F52455155495245440000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH1 0x41 EQ PUSH2 0x509 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST POP DUP8 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x519 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH1 0xF8 PUSH1 0x2 EXP SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0x537 DUP9 PUSH1 0x1 PUSH2 0xF4C JUMP JUMPDEST SWAP4 POP PUSH2 0x544 DUP9 PUSH1 0x21 PUSH2 0xF4C JUMP JUMPDEST SWAP3 POP PUSH1 0x1 DUP11 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x569 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x14F1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 PUSH1 0x0 DUP7 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x58D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP12 DUP2 AND SWAP1 DUP3 AND EQ SWAP9 POP SWAP3 POP PUSH2 0xB05 SWAP1 POP JUMP JUMPDEST PUSH1 0x3 DUP7 PUSH1 0x8 DUP2 GT ISZERO PUSH2 0x5BF JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x76B JUMPI DUP8 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x12 DUP2 MSTORE PUSH32 0x4C454E4754485F36365F52455155495245440000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH1 0x41 EQ PUSH2 0x61F JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST POP DUP8 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x62F JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH1 0xF8 PUSH1 0x2 EXP SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0x64D DUP9 PUSH1 0x1 PUSH2 0xF4C JUMP JUMPDEST SWAP4 POP PUSH2 0x65A DUP9 PUSH1 0x21 PUSH2 0xF4C JUMP JUMPDEST SWAP3 POP PUSH1 0x1 PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1C DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A333200000000 DUP2 MSTORE POP DUP12 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x6C7 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x6A8 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP4 DUP5 MSTORE POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP6 SUB DUP2 MSTORE SWAP4 DUP3 ADD SWAP1 DUP2 SWAP1 MSTORE DUP4 MLOAD SWAP4 SWAP5 POP SWAP3 DUP4 SWAP3 POP SWAP1 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x727 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x708 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 PUSH1 0x0 DUP4 MSTORE SWAP2 ADD SWAP3 DUP4 SWAP1 MSTORE PUSH2 0x569 SWAP5 POP SWAP3 POP DUP10 SWAP2 DUP10 SWAP2 POP DUP9 SWAP1 PUSH2 0x14F1 JUMP JUMPDEST PUSH1 0x4 DUP7 PUSH1 0x8 DUP2 GT ISZERO PUSH2 0x779 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x7EB JUMPI DUP8 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x11 DUP2 MSTORE PUSH32 0x4C454E4754485F315F5245515549524544000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 ISZERO PUSH2 0x7D7 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP10 AND CALLER EQ SWAP7 POP PUSH2 0xB05 JUMP JUMPDEST PUSH1 0x5 DUP7 PUSH1 0x8 DUP2 GT ISZERO PUSH2 0x7F9 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x89F JUMPI PUSH1 0x40 MLOAD PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP11 AND SWAP1 PUSH4 0x1626BA7E SWAP1 PUSH2 0x846 SWAP1 DUP14 SWAP1 DUP13 SWAP1 PUSH1 0x4 ADD PUSH2 0x14D1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x860 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x874 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x898 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x125F JUMP JUMPDEST SWAP7 POP PUSH2 0xB05 JUMP JUMPDEST PUSH1 0x6 DUP7 PUSH1 0x8 DUP2 GT ISZERO PUSH2 0x8AD JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x940 JUMPI PUSH2 0x8BC DUP9 PUSH2 0xFE0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP1 DUP12 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x8F7 JUMPI PUSH1 0x0 SWAP7 POP PUSH2 0xB05 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x9363470200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND SWAP1 PUSH4 0x93634702 SWAP1 PUSH2 0x846 SWAP1 DUP14 SWAP1 DUP14 SWAP1 DUP14 SWAP1 PUSH1 0x4 ADD PUSH2 0x149B JUMP JUMPDEST PUSH1 0x7 DUP7 PUSH1 0x8 DUP2 GT ISZERO PUSH2 0x94E JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x97F JUMPI PUSH1 0x0 DUP11 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP14 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP7 POP PUSH2 0xB05 JUMP JUMPDEST PUSH1 0x8 DUP7 PUSH1 0x8 DUP2 GT ISZERO PUSH2 0x98D JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xA78 JUMPI DUP8 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x12 DUP2 MSTORE PUSH32 0x4C454E4754485F36365F52455155495245440000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH1 0x41 EQ PUSH2 0x9ED JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST POP DUP8 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x9FD JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH1 0xF8 PUSH1 0x2 EXP SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0xA1B DUP9 PUSH1 0x1 PUSH2 0xF4C JUMP JUMPDEST SWAP4 POP PUSH2 0xA28 DUP9 PUSH1 0x21 PUSH2 0xF4C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1B DUP1 DUP3 MSTORE PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A410000000000 PUSH1 0x20 DUP1 DUP5 ADD SWAP2 DUP3 MSTORE SWAP4 MLOAD SWAP5 SWAP8 POP PUSH1 0x1 SWAP5 SWAP3 SWAP4 DUP16 SWAP4 ADD SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 PUSH2 0x6C7 JUMP JUMPDEST PUSH1 0x7 DUP7 PUSH1 0x8 DUP2 GT ISZERO PUSH2 0xA86 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xAB7 JUMPI PUSH1 0x0 DUP11 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP14 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP7 POP PUSH2 0xB05 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x15 DUP2 MSTORE PUSH32 0x5349474E41545552455F554E535550504F525445440000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH2 0x269 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x1526 JUMP JUMPDEST POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB1F DUP5 DUP5 DUP5 PUSH2 0x33A JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x12 DUP2 MSTORE PUSH32 0x5245454E5452414E43595F494C4C4547414C0000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND ISZERO PUSH2 0xB8B JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST POP ADDRESS DUP7 DUP9 DUP8 DUP8 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP7 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH13 0x1000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x14 ADD DUP6 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH13 0x1000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x14 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY DUP3 ADD SWAP2 POP POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xC3C JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xC1D JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 DUP4 MSTORE DUP6 SWAP1 KECCAK256 SLOAD DUP4 DUP7 ADD SWAP1 SWAP6 MSTORE PUSH1 0xF DUP4 MSTORE PUSH32 0x494E56414C49445F54585F484153480000000000000000000000000000000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP6 POP SWAP4 POP POP PUSH1 0xFF AND ISZERO SWAP1 POP PUSH2 0xCCD JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP7 AND CALLER EQ PUSH2 0xD9A JUMPI PUSH2 0xD19 DUP2 DUP8 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x33A SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH32 0x494E56414C49445F54585F5349474E4154555245000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 ISZERO ISZERO PUSH2 0xD70 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST POP PUSH1 0x3 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP9 AND OR SWAP1 SSTORE JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD ADDRESS SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP1 DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY DUP3 ADD SWAP2 POP POP SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH32 0x4641494C45445F455845435554494F4E00000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP3 POP ISZERO ISZERO SWAP1 POP PUSH2 0xE32 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST POP POP PUSH1 0x3 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 SSTORE POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND ISZERO PUSH2 0xE8F JUMPI PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0xE91 JUMP JUMPDEST CALLER JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x475245415445525F5448414E5F5A45524F5F4C454E4754485F52455155495245 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4400000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0xF1D JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST POP DUP2 MLOAD DUP3 SWAP1 PUSH1 0x0 NOT DUP2 ADD SWAP1 DUP2 LT PUSH2 0xF30 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD DUP3 MLOAD PUSH1 0x0 NOT ADD SWAP1 SWAP3 MSTORE POP PUSH1 0xF8 PUSH1 0x2 EXP SWAP1 DUP2 SWAP1 DIV MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD DUP4 MLOAD LT ISZERO PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x475245415445525F4F525F455155414C5F544F5F33325F4C454E4754485F5245 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0xFD6 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST POP POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x14 DUP3 MLOAD LT ISZERO PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x1068 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST POP PUSH2 0x1077 DUP3 PUSH1 0x14 DUP5 MLOAD SUB PUSH2 0x1084 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x13 NOT ADD SWAP1 SWAP3 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x110E JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST POP POP ADD PUSH1 0x14 ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x112D DUP3 CALLDATALOAD PUSH2 0x158A JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x112D DUP3 CALLDATALOAD PUSH2 0x1596 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x112D DUP3 MLOAD PUSH2 0x1596 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x112D DUP3 CALLDATALOAD PUSH2 0x159B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1F DUP4 ADD DUP5 SGT PUSH2 0x116A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1182 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x119A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x11B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x11C5 PUSH2 0x11C0 DUP3 PUSH2 0x155E JUMP JUMPDEST PUSH2 0x1537 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x11E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x11EC DUP4 DUP3 DUP5 PUSH2 0x15A4 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1208 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1214 DUP6 DUP6 PUSH2 0x1121 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x1225 DUP6 DUP3 DUP7 ADD PUSH2 0x1121 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1242 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x124E DUP6 DUP6 PUSH2 0x1121 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x1225 DUP6 DUP3 DUP7 ADD PUSH2 0x1134 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1271 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xB1F DUP5 DUP5 PUSH2 0x1140 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x128F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xB1F DUP5 DUP5 PUSH2 0x114C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x12AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1214 DUP6 DUP6 PUSH2 0x114C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x12D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x12DC DUP8 DUP8 PUSH2 0x114C JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x12ED DUP8 DUP3 DUP9 ADD PUSH2 0x1121 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x130A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1316 DUP8 DUP3 DUP9 ADD PUSH2 0x1158 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1337 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1343 DUP7 DUP7 PUSH2 0x114C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x1354 DUP7 DUP3 DUP8 ADD PUSH2 0x1121 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1371 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x137D DUP7 DUP3 DUP8 ADD PUSH2 0x11A1 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x13A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x13AC DUP10 DUP10 PUSH2 0x114C JUMP JUMPDEST SWAP7 POP POP PUSH1 0x20 PUSH2 0x13BD DUP10 DUP3 DUP11 ADD PUSH2 0x1121 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x13DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x13E6 DUP10 DUP3 DUP11 ADD PUSH2 0x1158 JUMP JUMPDEST SWAP5 POP SWAP5 POP POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1405 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1411 DUP10 DUP3 DUP11 ADD PUSH2 0x1158 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH2 0x1429 DUP2 PUSH2 0x158A JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x1429 DUP2 PUSH2 0x1596 JUMP JUMPDEST PUSH2 0x1429 DUP2 PUSH2 0x159B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x144C DUP3 PUSH2 0x1586 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x1460 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x15B0 JUMP JUMPDEST PUSH2 0x1469 DUP2 PUSH2 0x15E0 JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1429 DUP2 PUSH2 0x159E JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xE91 DUP3 DUP5 PUSH2 0x1420 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xE91 DUP3 DUP5 PUSH2 0x142F JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x14A9 DUP3 DUP7 PUSH2 0x1438 JUMP JUMPDEST PUSH2 0x14B6 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x1420 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x14C8 DUP2 DUP5 PUSH2 0x1441 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x14DF DUP3 DUP6 PUSH2 0x1438 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0xB1F DUP2 DUP5 PUSH2 0x1441 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x14FF DUP3 DUP8 PUSH2 0x1438 JUMP JUMPDEST PUSH2 0x150C PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x1476 JUMP JUMPDEST PUSH2 0x1519 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x1438 JUMP JUMPDEST PUSH2 0x14C8 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x1438 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x112D DUP2 DUP5 PUSH2 0x1441 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1556 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1575 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x15CB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x15B3 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x15DA JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 0x4a 0xbd CALLER 0xda 0xf8 EXP 0xd2 0xd2 0xd4 0xee 0xc3 SDIV 0xc7 PUSH11 0xC9A479ED80EBC3A5671BAA SWAP10 EXP PUSH20 0x2A53A98F6C6578706572696D656E74616CF50037 ", - "sourceMap": "759:412:9:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;759:412:9;;;;;;;" + "object": "0x7f454950373132446f6d61696e280000000000000000000000000000000000000060a09081527f737472696e67206e616d652c000000000000000000000000000000000000000060ad527f737472696e672076657273696f6e2c000000000000000000000000000000000060b9527f6164647265737320766572696679696e67436f6e74726163740000000000000060c8527f290000000000000000000000000000000000000000000000000000000000000060e1526042608081815260e26040819052909290918291908083835b60208310620000ef5780518252601f199092019160209182019101620000ce565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208285018552600b8084527f30782050726f746f636f6c000000000000000000000000000000000000000000928401928352945190965091945090928392508083835b60208310620001795780518252601f19909201916020918201910162000158565b51815160209384036101000a600019018019909216911617905260408051929094018290038220828501855260018084527f3200000000000000000000000000000000000000000000000000000000000000928401928352945190965091945090928392508083835b60208310620002035780518252601f199092019160209182019101620001e2565b51815160209384036101000a60001901801990921691161790526040519190930181900381206200023e9796955093503092019050620002d0565b6040516020818303038152906040526040518082805190602001908083835b602083106200027e5780518252601f1990920191602091820191016200025d565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091206000555062000325915050565b620002bf8162000316565b82525050565b620002bf8162000322565b60808101620002e08287620002c5565b620002ef6020830186620002c5565b620002fe6040830185620002c5565b6200030d6060830184620002b4565b95945050505050565b600160a060020a031690565b90565b611af780620003356000396000f3006080604052600436106100ae5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416632624b2d981146100b35780633683ef8e146100de578063642f2eaf1461010057806377fcce681461012d5780637b8e35141461014d57806382c174d01461016d578063936347021461018d578063abba41cc146101ad578063bfc8bfce146101cd578063e306f779146101ed578063eea086ba14610202575b600080fd5b3480156100bf57600080fd5b506100c8610224565b6040516100d59190611938565b60405180910390f35b3480156100ea57600080fd5b506100fe6100f9366004611757565b61035a565b005b34801561010c57600080fd5b5061012061011b36600461171a565b610428565b6040516100d5919061192a565b34801561013957600080fd5b506100fe6101483660046116cc565b61043d565b34801561015957600080fd5b50610120610168366004611692565b610482565b34801561017957600080fd5b50610120610188366004611738565b6104a2565b34801561019957600080fd5b506101206101a83660046117bf565b6104c2565b3480156101b957600080fd5b506101206101c83660046117bf565b610d1d565b3480156101d957600080fd5b506100fe6101e8366004611824565b610d32565b3480156101f957600080fd5b506100c8610fd5565b34801561020e57600080fd5b50610217610fdb565b6040516100d5919061191c565b604080517f454950373132446f6d61696e28000000000000000000000000000000000000006020808301919091527f737472696e67206e616d652c0000000000000000000000000000000000000000602d8301527f737472696e672076657273696f6e2c000000000000000000000000000000000060398301527f6164647265737320766572696679696e67436f6e74726163740000000000000060488301527f2900000000000000000000000000000000000000000000000000000000000000606183015282516042818403018152606290920192839052815191929182918401908083835b6020831061032a5780518252601f19909201916020918201910161030b565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902081565b610395848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437506104c2945050505050565b60408051808201909152601181527f494e56414c49445f5349474e415455524500000000000000000000000000000060208201529015156103f55760405160e560020a62461bcd0281526004016103ec91906119f9565b60405180910390fd5b5050506000918252600160208181526040808520600160a060020a0390941685529290529120805460ff19169091179055565b60036020526000908152604090205460ff1681565b6000610447610fea565b600160a060020a03908116600090815260026020908152604080832096909316825294909452909220805460ff191691151591909117905550565b600260209081526000928352604080842090915290825290205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b60008060008060008060008060008951116040805190810160405280601e81526020017f4c454e4754485f475245415445525f5448414e5f305f5245515549524544000081525090151561052c5760405160e560020a62461bcd0281526004016103ec91906119f9565b5061053689611019565b60408051808201909152601581527f5349474e41545552455f554e535550504f525445440000000000000000000000602082015260f860020a9091049750600960ff89161061059b5760405160e560020a62461bcd0281526004016103ec91906119f9565b508660ff1660098111156105ab57fe5b955060008660098111156105bb57fe5b141561060f57604080518082018252601181527f5349474e41545552455f494c4c4547414c0000000000000000000000000000006020820152905160e560020a62461bcd0281526103ec91906004016119f9565b600186600981111561061d57fe5b141561068557885160408051808201909152601181527f4c454e4754485f305f52455155495245440000000000000000000000000000006020820152901561067b5760405160e560020a62461bcd0281526004016103ec91906119f9565b5060009750610d0f565b600286600981111561069357fe5b141561079b57885160408051808201909152601281527f4c454e4754485f36355f524551554952454400000000000000000000000000006020820152906041146106f35760405160e560020a62461bcd0281526004016103ec91906119f9565b5088600081518110151561070357fe5b016020015160f860020a9081900481020494506107218960016110ce565b935061072e8960216110ce565b925060018b8686866040516000815260200160405260405161075394939291906119d1565b60206040516020810390808403906000865af1158015610777573d6000803e3d6000fd5b5050604051601f190151600160a060020a038c81169082161499509250610d0f9050565b60038660098111156107a957fe5b141561095557885160408051808201909152601281527f4c454e4754485f36355f524551554952454400000000000000000000000000006020820152906041146108095760405160e560020a62461bcd0281526004016103ec91906119f9565b5088600081518110151561081957fe5b016020015160f860020a9081900481020494506108378960016110ce565b93506108448960216110ce565b925060016040805190810160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152508c6040516020018083805190602001908083835b602083106108b15780518252601f199092019160209182019101610892565b51815160209384036101000a600019018019909216911617905292019384525060408051808503815293820190819052835193945092839250908401908083835b602083106109115780518252601f1990920191602091820191016108f2565b51815160209384036101000a6000190180199092169116179052604080519290940182900382206000835291019283905261075394509250899189915088906119d1565b600486600981111561096357fe5b14156109d557885160408051808201909152601181527f4c454e4754485f305f5245515549524544000000000000000000000000000000602082015290156109c15760405160e560020a62461bcd0281526004016103ec91906119f9565b50600160a060020a038a1633149750610d0f565b60058660098111156109e357fe5b1415610a89576040517f1626ba7e000000000000000000000000000000000000000000000000000000008152600160a060020a038b1690631626ba7e90610a30908e908d9060040161197c565b602060405180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a8291908101906116fc565b9750610d0f565b6006866009811115610a9757fe5b1415610b2a57610aa689611162565b600160a060020a03808c1660009081526002602090815260408083209385168352929052205490915060ff161515610ae15760009750610d0f565b6040517f93634702000000000000000000000000000000000000000000000000000000008152600160a060020a03821690639363470290610a30908e908e908e90600401611946565b6007866009811115610b3857fe5b1415610b6b5760008b8152600160209081526040808320600160a060020a038e16845290915290205460ff169750610d0f565b6008866009811115610b7957fe5b1415610c8057885160408051808201909152601281527f4c454e4754485f36355f52455155495245440000000000000000000000000000602082015290604114610bd95760405160e560020a62461bcd0281526004016103ec91906119f9565b50886000815181101515610be957fe5b016020015160f860020a908190048102049450610c078960016110ce565b9350610c148960216110ce565b925060016040805190810160405280601b81526020017f19457468657265756d205369676e6564204d6573736167653a0a2000000000008152508c604051602001808380519060200190808383602083106108b15780518252601f199092019160209182019101610892565b6007866009811115610c8e57fe5b1415610cc15760008b8152600160209081526040808320600160a060020a038e16845290915290205460ff169750610d0f565b604080518082018252601581527f5349474e41545552455f554e535550504f5254454400000000000000000000006020820152905160e560020a62461bcd0281526103ec91906004016119f9565b505050505050509392505050565b6000610d2a8484846104c2565b949350505050565b60045460408051808201909152601281527f5245454e5452414e43595f494c4c4547414c00000000000000000000000000006020820152600091600160a060020a031615610d965760405160e560020a62461bcd0281526004016103ec91906119f9565b50610dda610dd5888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843750611206945050505050565b611419565b600081815260036020908152604091829020548251808401909352600f83527f494e56414c49445f54585f484153480000000000000000000000000000000000918301919091529192509060ff1615610e495760405160e560020a62461bcd0281526004016103ec91906119f9565b50600160a060020a0386163314610f1657610e95818785858080601f016020809104026020016040519081016040528093929190818152602001838380828437506104c2945050505050565b60408051808201909152601481527f494e56414c49445f54585f5349474e41545552450000000000000000000000006020820152901515610eec5760405160e560020a62461bcd0281526004016103ec91906119f9565b506004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0388161790555b60008181526003602052604090819020805460ff191660011790555130908690869080838380828437820191505092505050600060405180830381855af460408051808201909152601081527f4641494c45445f455845435554494f4e000000000000000000000000000000006020820152925015159050610fae5760405160e560020a62461bcd0281526004016103ec91906119f9565b50506004805473ffffffffffffffffffffffffffffffffffffffff19169055505050505050565b60005481565b600454600160a060020a031681565b6004546000908190600160a060020a03161561101157600454600160a060020a0316611013565b335b92915050565b600080825111606060405190810160405280602181526020017f475245415445525f5448414e5f5a45524f5f4c454e4754485f5245515549524581526020017f440000000000000000000000000000000000000000000000000000000000000081525090151561109f5760405160e560020a62461bcd0281526004016103ec91906119f9565b508151829060001981019081106110b257fe5b01602001518251600019019092525060f860020a908190040290565b60008160200183511015606060405190810160405280602681526020017f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f524581526020017f51554952454400000000000000000000000000000000000000000000000000008152509015156111585760405160e560020a62461bcd0281526004016103ec91906119f9565b5050016020015190565b6000601482511015606060405190810160405280602681526020017f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524581526020017f51554952454400000000000000000000000000000000000000000000000000008152509015156111ea5760405160e560020a62461bcd0281526004016103ec91906119f9565b506111f9826014845103611521565b8251601319019092525090565b604080517f5a65726f45785472616e73616374696f6e2800000000000000000000000000006020808301919091527f75696e743235362073616c742c0000000000000000000000000000000000000060328301527f61646472657373207369676e65722c0000000000000000000000000000000000603f8301527f6279746573206461746100000000000000000000000000000000000000000000604e8301527f29000000000000000000000000000000000000000000000000000000000000006058830152825160398184030181526059909201928390528151600093918291908401908083835b6020831061130e5780518252601f1990920191602091820191016112ef565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390208484846040518082805190602001908083835b6020831061136d5780518252601f19909201916020918201910161134e565b51815160209384036101000a60001901801990921691161790526040519190930181900381206113a798979695509350909101905061199c565b6040516020818303038152906040526040518082805190602001908083835b602083106113e55780518252601f1990920191602091820191016113c6565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120979650505050505050565b60006040805190810160405280600281526020017f1901000000000000000000000000000000000000000000000000000000000000815250600054836040516020018084805190602001908083835b602083106114875780518252601f199092019160209182019101611468565b51815160209384036101000a6000190180199092169116179052920194855250838101929092525060408051808403830181529281019081905282519293509182918401908083835b602083106114ef5780518252601f1990920191602091820191016114d0565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912095945050505050565b60008160140183511015606060405190810160405280602681526020017f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524581526020017f51554952454400000000000000000000000000000000000000000000000000008152509015156115ab5760405160e560020a62461bcd0281526004016103ec91906119f9565b50500160140151600160a060020a031690565b60006115ca8235611a5d565b9392505050565b60006115ca8235611a69565b60006115ca8251611a69565b60006115ca8235611a6e565b600080601f8301841361160757600080fd5b50813567ffffffffffffffff81111561161f57600080fd5b60208301915083600182028301111561163757600080fd5b9250929050565b6000601f8201831361164f57600080fd5b813561166261165d82611a31565b611a0a565b9150808252602083016020830185838301111561167e57600080fd5b611689838284611a77565b50505092915050565b600080604083850312156116a557600080fd5b60006116b185856115be565b92505060206116c2858286016115be565b9150509250929050565b600080604083850312156116df57600080fd5b60006116eb85856115be565b92505060206116c2858286016115d1565b60006020828403121561170e57600080fd5b6000610d2a84846115dd565b60006020828403121561172c57600080fd5b6000610d2a84846115e9565b6000806040838503121561174b57600080fd5b60006116b185856115e9565b6000806000806060858703121561176d57600080fd5b600061177987876115e9565b945050602061178a878288016115be565b935050604085013567ffffffffffffffff8111156117a757600080fd5b6117b3878288016115f5565b95989497509550505050565b6000806000606084860312156117d457600080fd5b60006117e086866115e9565b93505060206117f1868287016115be565b925050604084013567ffffffffffffffff81111561180e57600080fd5b61181a8682870161163e565b9150509250925092565b6000806000806000806080878903121561183d57600080fd5b600061184989896115e9565b965050602061185a89828a016115be565b955050604087013567ffffffffffffffff81111561187757600080fd5b61188389828a016115f5565b9450945050606087013567ffffffffffffffff8111156118a257600080fd5b6118ae89828a016115f5565b92509250509295509295509295565b6118c681611a5d565b82525050565b6118c681611a69565b6118c681611a6e565b60006118e982611a59565b8084526118fd816020860160208601611a83565b61190681611ab3565b9093016020019392505050565b6118c681611a71565b6020810161101382846118bd565b6020810161101382846118cc565b6020810161101382846118d5565b6060810161195482866118d5565b61196160208301856118bd565b818103604083015261197381846118de565b95945050505050565b6040810161198a82856118d5565b8181036020830152610d2a81846118de565b608081016119aa82876118d5565b6119b760208301866118d5565b6119c460408301856118bd565b61197360608301846118d5565b608081016119df82876118d5565b6119ec6020830186611913565b6119c460408301856118d5565b602080825281016115ca81846118de565b60405181810167ffffffffffffffff81118282101715611a2957600080fd5b604052919050565b600067ffffffffffffffff821115611a4857600080fd5b506020601f91909101601f19160190565b5190565b600160a060020a031690565b151590565b90565b60ff1690565b82818337506000910152565b60005b83811015611a9e578181015183820152602001611a86565b83811115611aad576000848401525b50505050565b601f01601f1916905600a265627a7a72305820b1f75823f1e62a7c99f1712cce44f57e2fa098edd65b9d0b98b92d3f0392446f6c6578706572696d656e74616cf50037", + "opcodes": "PUSH32 0x454950373132446F6D61696E2800000000000000000000000000000000000000 PUSH1 0xA0 SWAP1 DUP2 MSTORE PUSH32 0x737472696E67206E616D652C0000000000000000000000000000000000000000 PUSH1 0xAD MSTORE PUSH32 0x737472696E672076657273696F6E2C0000000000000000000000000000000000 PUSH1 0xB9 MSTORE PUSH32 0x6164647265737320766572696679696E67436F6E747261637400000000000000 PUSH1 0xC8 MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0xE1 MSTORE PUSH1 0x42 PUSH1 0x80 DUP2 DUP2 MSTORE PUSH1 0xE2 PUSH1 0x40 DUP2 SWAP1 MSTORE SWAP1 SWAP3 SWAP1 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0xEF JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH3 0xCE JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 DUP3 DUP6 ADD DUP6 MSTORE PUSH1 0xB DUP1 DUP5 MSTORE PUSH32 0x30782050726F746F636F6C000000000000000000000000000000000000000000 SWAP3 DUP5 ADD SWAP3 DUP4 MSTORE SWAP5 MLOAD SWAP1 SWAP7 POP SWAP2 SWAP5 POP SWAP1 SWAP3 DUP4 SWAP3 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0x179 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH3 0x158 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 DUP3 DUP6 ADD DUP6 MSTORE PUSH1 0x1 DUP1 DUP5 MSTORE PUSH32 0x3200000000000000000000000000000000000000000000000000000000000000 SWAP3 DUP5 ADD SWAP3 DUP4 MSTORE SWAP5 MLOAD SWAP1 SWAP7 POP SWAP2 SWAP5 POP SWAP1 SWAP3 DUP4 SWAP3 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0x203 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH3 0x1E2 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 PUSH3 0x23E SWAP8 SWAP7 SWAP6 POP SWAP4 POP ADDRESS SWAP3 ADD SWAP1 POP PUSH3 0x2D0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0x27E JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH3 0x25D JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 PUSH1 0x0 SSTORE POP PUSH3 0x325 SWAP2 POP POP JUMP JUMPDEST PUSH3 0x2BF DUP2 PUSH3 0x316 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH3 0x2BF DUP2 PUSH3 0x322 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH3 0x2E0 DUP3 DUP8 PUSH3 0x2C5 JUMP JUMPDEST PUSH3 0x2EF PUSH1 0x20 DUP4 ADD DUP7 PUSH3 0x2C5 JUMP JUMPDEST PUSH3 0x2FE PUSH1 0x40 DUP4 ADD DUP6 PUSH3 0x2C5 JUMP JUMPDEST PUSH3 0x30D PUSH1 0x60 DUP4 ADD DUP5 PUSH3 0x2B4 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x1AF7 DUP1 PUSH3 0x335 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xAE JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x2624B2D9 DUP2 EQ PUSH2 0xB3 JUMPI DUP1 PUSH4 0x3683EF8E EQ PUSH2 0xDE JUMPI DUP1 PUSH4 0x642F2EAF EQ PUSH2 0x100 JUMPI DUP1 PUSH4 0x77FCCE68 EQ PUSH2 0x12D JUMPI DUP1 PUSH4 0x7B8E3514 EQ PUSH2 0x14D JUMPI DUP1 PUSH4 0x82C174D0 EQ PUSH2 0x16D JUMPI DUP1 PUSH4 0x93634702 EQ PUSH2 0x18D JUMPI DUP1 PUSH4 0xABBA41CC EQ PUSH2 0x1AD JUMPI DUP1 PUSH4 0xBFC8BFCE EQ PUSH2 0x1CD JUMPI DUP1 PUSH4 0xE306F779 EQ PUSH2 0x1ED JUMPI DUP1 PUSH4 0xEEA086BA EQ PUSH2 0x202 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC8 PUSH2 0x224 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD5 SWAP2 SWAP1 PUSH2 0x1938 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFE PUSH2 0xF9 CALLDATASIZE PUSH1 0x4 PUSH2 0x1757 JUMP JUMPDEST PUSH2 0x35A JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0x11B CALLDATASIZE PUSH1 0x4 PUSH2 0x171A JUMP JUMPDEST PUSH2 0x428 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD5 SWAP2 SWAP1 PUSH2 0x192A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x139 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFE PUSH2 0x148 CALLDATASIZE PUSH1 0x4 PUSH2 0x16CC JUMP JUMPDEST PUSH2 0x43D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x159 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0x168 CALLDATASIZE PUSH1 0x4 PUSH2 0x1692 JUMP JUMPDEST PUSH2 0x482 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x179 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0x188 CALLDATASIZE PUSH1 0x4 PUSH2 0x1738 JUMP JUMPDEST PUSH2 0x4A2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x199 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0x1A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x17BF JUMP JUMPDEST PUSH2 0x4C2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0x1C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x17BF JUMP JUMPDEST PUSH2 0xD1D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFE PUSH2 0x1E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1824 JUMP JUMPDEST PUSH2 0xD32 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC8 PUSH2 0xFD5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x20E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x217 PUSH2 0xFDB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD5 SWAP2 SWAP1 PUSH2 0x191C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x454950373132446F6D61696E2800000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x737472696E67206E616D652C0000000000000000000000000000000000000000 PUSH1 0x2D DUP4 ADD MSTORE PUSH32 0x737472696E672076657273696F6E2C0000000000000000000000000000000000 PUSH1 0x39 DUP4 ADD MSTORE PUSH32 0x6164647265737320766572696679696E67436F6E747261637400000000000000 PUSH1 0x48 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x61 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x42 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x62 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD SWAP2 SWAP3 SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x32A JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x30B JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP2 JUMP JUMPDEST PUSH2 0x395 DUP5 DUP5 DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x4C2 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x11 DUP2 MSTORE PUSH32 0x494E56414C49445F5349474E4154555245000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 ISZERO ISZERO PUSH2 0x3F5 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP6 KECCAK256 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP5 AND DUP6 MSTORE SWAP3 SWAP1 MSTORE SWAP2 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x447 PUSH2 0xFEA JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP7 SWAP1 SWAP4 AND DUP3 MSTORE SWAP5 SWAP1 SWAP5 MSTORE SWAP1 SWAP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP10 MLOAD GT PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4C454E4754485F475245415445525F5448414E5F305F52455155495245440000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x52C JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP PUSH2 0x536 DUP10 PUSH2 0x1019 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x15 DUP2 MSTORE PUSH32 0x5349474E41545552455F554E535550504F525445440000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xF8 PUSH1 0x2 EXP SWAP1 SWAP2 DIV SWAP8 POP PUSH1 0x9 PUSH1 0xFF DUP10 AND LT PUSH2 0x59B JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP DUP7 PUSH1 0xFF AND PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x5AB JUMPI INVALID JUMPDEST SWAP6 POP PUSH1 0x0 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x5BB JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x60F JUMPI PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x11 DUP2 MSTORE PUSH32 0x5349474E41545552455F494C4C4547414C000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH2 0x3EC SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x19F9 JUMP JUMPDEST PUSH1 0x1 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x61D JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x685 JUMPI DUP9 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x11 DUP2 MSTORE PUSH32 0x4C454E4754485F305F5245515549524544000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 ISZERO PUSH2 0x67B JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP PUSH1 0x0 SWAP8 POP PUSH2 0xD0F JUMP JUMPDEST PUSH1 0x2 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x693 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x79B JUMPI DUP9 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x12 DUP2 MSTORE PUSH32 0x4C454E4754485F36355F52455155495245440000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH1 0x41 EQ PUSH2 0x6F3 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x703 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH1 0xF8 PUSH1 0x2 EXP SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0x721 DUP10 PUSH1 0x1 PUSH2 0x10CE JUMP JUMPDEST SWAP4 POP PUSH2 0x72E DUP10 PUSH1 0x21 PUSH2 0x10CE JUMP JUMPDEST SWAP3 POP PUSH1 0x1 DUP12 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x753 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x19D1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 PUSH1 0x0 DUP7 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x777 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP13 DUP2 AND SWAP1 DUP3 AND EQ SWAP10 POP SWAP3 POP PUSH2 0xD0F SWAP1 POP JUMP JUMPDEST PUSH1 0x3 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x7A9 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x955 JUMPI DUP9 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x12 DUP2 MSTORE PUSH32 0x4C454E4754485F36355F52455155495245440000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH1 0x41 EQ PUSH2 0x809 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x819 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH1 0xF8 PUSH1 0x2 EXP SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0x837 DUP10 PUSH1 0x1 PUSH2 0x10CE JUMP JUMPDEST SWAP4 POP PUSH2 0x844 DUP10 PUSH1 0x21 PUSH2 0x10CE JUMP JUMPDEST SWAP3 POP PUSH1 0x1 PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1C DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A333200000000 DUP2 MSTORE POP DUP13 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x8B1 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x892 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP4 DUP5 MSTORE POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP6 SUB DUP2 MSTORE SWAP4 DUP3 ADD SWAP1 DUP2 SWAP1 MSTORE DUP4 MLOAD SWAP4 SWAP5 POP SWAP3 DUP4 SWAP3 POP SWAP1 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x911 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x8F2 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 PUSH1 0x0 DUP4 MSTORE SWAP2 ADD SWAP3 DUP4 SWAP1 MSTORE PUSH2 0x753 SWAP5 POP SWAP3 POP DUP10 SWAP2 DUP10 SWAP2 POP DUP9 SWAP1 PUSH2 0x19D1 JUMP JUMPDEST PUSH1 0x4 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x963 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x9D5 JUMPI DUP9 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x11 DUP2 MSTORE PUSH32 0x4C454E4754485F305F5245515549524544000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 ISZERO PUSH2 0x9C1 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP11 AND CALLER EQ SWAP8 POP PUSH2 0xD0F JUMP JUMPDEST PUSH1 0x5 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x9E3 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xA89 JUMPI PUSH1 0x40 MLOAD PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP12 AND SWAP1 PUSH4 0x1626BA7E SWAP1 PUSH2 0xA30 SWAP1 DUP15 SWAP1 DUP14 SWAP1 PUSH1 0x4 ADD PUSH2 0x197C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA4A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA5E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0xA82 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x16FC JUMP JUMPDEST SWAP8 POP PUSH2 0xD0F JUMP JUMPDEST PUSH1 0x6 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0xA97 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xB2A JUMPI PUSH2 0xAA6 DUP10 PUSH2 0x1162 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP1 DUP13 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO ISZERO PUSH2 0xAE1 JUMPI PUSH1 0x0 SWAP8 POP PUSH2 0xD0F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x9363470200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND SWAP1 PUSH4 0x93634702 SWAP1 PUSH2 0xA30 SWAP1 DUP15 SWAP1 DUP15 SWAP1 DUP15 SWAP1 PUSH1 0x4 ADD PUSH2 0x1946 JUMP JUMPDEST PUSH1 0x7 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0xB38 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xB6B JUMPI PUSH1 0x0 DUP12 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP15 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP8 POP PUSH2 0xD0F JUMP JUMPDEST PUSH1 0x8 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0xB79 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xC80 JUMPI DUP9 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x12 DUP2 MSTORE PUSH32 0x4C454E4754485F36355F52455155495245440000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH1 0x41 EQ PUSH2 0xBD9 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xBE9 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH1 0xF8 PUSH1 0x2 EXP SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0xC07 DUP10 PUSH1 0x1 PUSH2 0x10CE JUMP JUMPDEST SWAP4 POP PUSH2 0xC14 DUP10 PUSH1 0x21 PUSH2 0x10CE JUMP JUMPDEST SWAP3 POP PUSH1 0x1 PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1B DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A200000000000 DUP2 MSTORE POP DUP13 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x20 DUP4 LT PUSH2 0x8B1 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x892 JUMP JUMPDEST PUSH1 0x7 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0xC8E JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xCC1 JUMPI PUSH1 0x0 DUP12 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP15 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP8 POP PUSH2 0xD0F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x15 DUP2 MSTORE PUSH32 0x5349474E41545552455F554E535550504F525445440000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH2 0x3EC SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x19F9 JUMP JUMPDEST POP POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD2A DUP5 DUP5 DUP5 PUSH2 0x4C2 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x12 DUP2 MSTORE PUSH32 0x5245454E5452414E43595F494C4C4547414C0000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND ISZERO PUSH2 0xD96 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP PUSH2 0xDDA PUSH2 0xDD5 DUP9 DUP9 DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x1206 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1419 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0xF DUP4 MSTORE PUSH32 0x494E56414C49445F54585F484153480000000000000000000000000000000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 SWAP3 POP SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0xE49 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP7 AND CALLER EQ PUSH2 0xF16 JUMPI PUSH2 0xE95 DUP2 DUP8 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x4C2 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH32 0x494E56414C49445F54585F5349474E4154555245000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 ISZERO ISZERO PUSH2 0xEEC JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP PUSH1 0x4 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP9 AND OR SWAP1 SSTORE JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD ADDRESS SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP1 DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY DUP3 ADD SWAP2 POP POP SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH32 0x4641494C45445F455845435554494F4E00000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP3 POP ISZERO ISZERO SWAP1 POP PUSH2 0xFAE JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP POP PUSH1 0x4 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 SSTORE POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND ISZERO PUSH2 0x1011 JUMPI PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0x1013 JUMP JUMPDEST CALLER JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x475245415445525F5448414E5F5A45524F5F4C454E4754485F52455155495245 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4400000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x109F JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP DUP2 MLOAD DUP3 SWAP1 PUSH1 0x0 NOT DUP2 ADD SWAP1 DUP2 LT PUSH2 0x10B2 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD DUP3 MLOAD PUSH1 0x0 NOT ADD SWAP1 SWAP3 MSTORE POP PUSH1 0xF8 PUSH1 0x2 EXP SWAP1 DUP2 SWAP1 DIV MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD DUP4 MLOAD LT ISZERO PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x475245415445525F4F525F455155414C5F544F5F33325F4C454E4754485F5245 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x1158 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x14 DUP3 MLOAD LT ISZERO PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x11EA JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP PUSH2 0x11F9 DUP3 PUSH1 0x14 DUP5 MLOAD SUB PUSH2 0x1521 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x13 NOT ADD SWAP1 SWAP3 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x5A65726F45785472616E73616374696F6E280000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x75696E743235362073616C742C00000000000000000000000000000000000000 PUSH1 0x32 DUP4 ADD MSTORE PUSH32 0x61646472657373207369676E65722C0000000000000000000000000000000000 PUSH1 0x3F DUP4 ADD MSTORE PUSH32 0x6279746573206461746100000000000000000000000000000000000000000000 PUSH1 0x4E DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x58 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x39 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x59 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP4 SWAP2 DUP3 SWAP2 SWAP1 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x130E JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x12EF JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x136D JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x134E JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 PUSH2 0x13A7 SWAP9 SWAP8 SWAP7 SWAP6 POP SWAP4 POP SWAP1 SWAP2 ADD SWAP1 POP PUSH2 0x199C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x13E5 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x13C6 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x0 SLOAD DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1487 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1468 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP DUP4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP5 SUB DUP4 ADD DUP2 MSTORE SWAP3 DUP2 ADD SWAP1 DUP2 SWAP1 MSTORE DUP3 MLOAD SWAP3 SWAP4 POP SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x14EF JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x14D0 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x15AB JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP POP ADD PUSH1 0x14 ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15CA DUP3 CALLDATALOAD PUSH2 0x1A5D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15CA DUP3 CALLDATALOAD PUSH2 0x1A69 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15CA DUP3 MLOAD PUSH2 0x1A69 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15CA DUP3 CALLDATALOAD PUSH2 0x1A6E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1F DUP4 ADD DUP5 SGT PUSH2 0x1607 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x161F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x1637 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x164F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1662 PUSH2 0x165D DUP3 PUSH2 0x1A31 JUMP JUMPDEST PUSH2 0x1A0A JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x167E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1689 DUP4 DUP3 DUP5 PUSH2 0x1A77 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x16A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x16B1 DUP6 DUP6 PUSH2 0x15BE JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x16C2 DUP6 DUP3 DUP7 ADD PUSH2 0x15BE JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x16DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x16EB DUP6 DUP6 PUSH2 0x15BE JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x16C2 DUP6 DUP3 DUP7 ADD PUSH2 0x15D1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x170E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xD2A DUP5 DUP5 PUSH2 0x15DD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x172C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xD2A DUP5 DUP5 PUSH2 0x15E9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x174B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x16B1 DUP6 DUP6 PUSH2 0x15E9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x176D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1779 DUP8 DUP8 PUSH2 0x15E9 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x178A DUP8 DUP3 DUP9 ADD PUSH2 0x15BE JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x17A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x17B3 DUP8 DUP3 DUP9 ADD PUSH2 0x15F5 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x17D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x17E0 DUP7 DUP7 PUSH2 0x15E9 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x17F1 DUP7 DUP3 DUP8 ADD PUSH2 0x15BE JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x180E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x181A DUP7 DUP3 DUP8 ADD PUSH2 0x163E JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x183D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1849 DUP10 DUP10 PUSH2 0x15E9 JUMP JUMPDEST SWAP7 POP POP PUSH1 0x20 PUSH2 0x185A DUP10 DUP3 DUP11 ADD PUSH2 0x15BE JUMP JUMPDEST SWAP6 POP POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1877 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1883 DUP10 DUP3 DUP11 ADD PUSH2 0x15F5 JUMP JUMPDEST SWAP5 POP SWAP5 POP POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x18A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x18AE DUP10 DUP3 DUP11 ADD PUSH2 0x15F5 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH2 0x18C6 DUP2 PUSH2 0x1A5D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x18C6 DUP2 PUSH2 0x1A69 JUMP JUMPDEST PUSH2 0x18C6 DUP2 PUSH2 0x1A6E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x18E9 DUP3 PUSH2 0x1A59 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x18FD DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1A83 JUMP JUMPDEST PUSH2 0x1906 DUP2 PUSH2 0x1AB3 JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x18C6 DUP2 PUSH2 0x1A71 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1013 DUP3 DUP5 PUSH2 0x18BD JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1013 DUP3 DUP5 PUSH2 0x18CC JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1013 DUP3 DUP5 PUSH2 0x18D5 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x1954 DUP3 DUP7 PUSH2 0x18D5 JUMP JUMPDEST PUSH2 0x1961 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x18BD JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x1973 DUP2 DUP5 PUSH2 0x18DE JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x198A DUP3 DUP6 PUSH2 0x18D5 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0xD2A DUP2 DUP5 PUSH2 0x18DE JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x19AA DUP3 DUP8 PUSH2 0x18D5 JUMP JUMPDEST PUSH2 0x19B7 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x18D5 JUMP JUMPDEST PUSH2 0x19C4 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x18BD JUMP JUMPDEST PUSH2 0x1973 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x18D5 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x19DF DUP3 DUP8 PUSH2 0x18D5 JUMP JUMPDEST PUSH2 0x19EC PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x1913 JUMP JUMPDEST PUSH2 0x19C4 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x18D5 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x15CA DUP2 DUP5 PUSH2 0x18DE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1A29 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1A48 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1A9E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1A86 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1AAD JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 0xb1 0xf7 PC 0x23 CALL 0xe6 0x2a PUSH29 0x99F1712CCE44F57E2FA098EDD65B9D0B98B92D3F0392446F6C65787065 PUSH19 0x696D656E74616CF50037000000000000000000 ", + "sourceMap": "1015:148:6:-;;;;;;;;;;;;;;;;;22:32:-1;759:412:10;6:49:-1;;;1015:148:6;759:412:10;1015:148:6;;;759:412:10;;1015:148:6;;;;;22:32:-1;1015:148:6;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1005:159:6;;;;;;;;;;;;1423:18;;;;;;;;;;;;;;;;1407:36;;1005:159;;-1:-1:-1;1005:159:6;;-1:-1:-1;1407:36:6;;;;-1:-1:-1;1423:18:6;1407:36;1423:18;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1407:36:6;;;;;;;;;;;;1473:21;;;;;274:1:-1;1473:21:6;;;;;;;;;;1457:39;;1407:36;;-1:-1:-1;1407:36:6;;-1:-1:-1;1457:39:6;;;;-1:-1:-1;274:1;1457:39:6;1473:21;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1457:39:6;;;;;;;;;;;1334:199;;;;-1:-1:-1;1457:39:6;-1:-1:-1;1518:4:6;;1334:199;;-1:-1:-1;1334:199:6;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1334:199:6;;;1324:210;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;1324:210:6;;;;;;;;;;-1:-1:-1;1303:231:6;-1:-1:-1;759:412:10;;-1:-1:-1;;759:412:10;5:110:-1;78:31;103:5;78:31;;;73:3;66:44;60:55;;;122:110;195:31;220:5;195:31;;239:497;431:3;416:19;;446:61;420:9;480:6;446:61;;;518:62;576:2;565:9;561:18;552:6;518:62;;;591;649:2;638:9;634:18;625:6;591:62;;;664;722:2;711:9;707:18;698:6;664:62;;;402:334;;;;;;;;743:128;-1:-1;;;;;812:54;;795:76;878:79;947:5;930:27;;759:412:10;;;;;;" }, "deployedBytecode": { "linkReferences": {}, - "object": "0x6080604052600436106100985763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633683ef8e811461009d578063642f2eaf146100bf57806377fcce68146100f55780637b8e35141461011557806382c174d0146101355780639363470214610155578063abba41cc14610175578063bfc8bfce14610195578063eea086ba146101b5575b600080fd5b3480156100a957600080fd5b506100bd6100b83660046112ba565b6101d7565b005b3480156100cb57600080fd5b506100df6100da36600461127d565b6102a3565b6040516100ec919061148d565b60405180910390f35b34801561010157600080fd5b506100bd61011036600461122f565b6102b8565b34801561012157600080fd5b506100df6101303660046111f5565b6102fd565b34801561014157600080fd5b506100df61015036600461129b565b61031d565b34801561016157600080fd5b506100df610170366004611322565b61033a565b34801561018157600080fd5b506100df610190366004611322565b610b12565b3480156101a157600080fd5b506100bd6101b0366004611387565b610b27565b3480156101c157600080fd5b506101ca610e59565b6040516100ec919061147f565b610212848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284375061033a945050505050565b60408051808201909152601181527f494e56414c49445f5349474e415455524500000000000000000000000000000060208201529015156102725760405160e560020a62461bcd0281526004016102699190611526565b60405180910390fd5b505050600091825260208281526040808420600160a060020a0390931684529190529020805460ff19166001179055565b60026020526000908152604090205460ff1681565b60006102c2610e68565b600160a060020a03908116600090815260016020908152604080832096909316825294909452909220805460ff191691151591909117905550565b600160209081526000928352604080842090915290825290205460ff1681565b600060208181529281526040808220909352908152205460ff1681565b6000806000806000806000808851116040805190810160405280601e81526020017f4c454e4754485f475245415445525f5448414e5f305f524551554952454400008152509015156103a25760405160e560020a62461bcd0281526004016102699190611526565b506103ac88610e97565b60f860020a900460ff1660088111156103c157fe5b955060008660088111156103d157fe5b141561042557604080518082018252601181527f5349474e41545552455f494c4c4547414c0000000000000000000000000000006020820152905160e560020a62461bcd0281526102699190600401611526565b600186600881111561043357fe5b141561049b57875160408051808201909152601181527f4c454e4754485f315f5245515549524544000000000000000000000000000000602082015290156104915760405160e560020a62461bcd0281526004016102699190611526565b5060009650610b05565b60028660088111156104a957fe5b14156105b157875160408051808201909152601281527f4c454e4754485f36365f524551554952454400000000000000000000000000006020820152906041146105095760405160e560020a62461bcd0281526004016102699190611526565b5087600081518110151561051957fe5b016020015160f860020a908190048102049450610537886001610f4c565b9350610544886021610f4c565b925060018a8686866040516000815260200160405260405161056994939291906114f1565b60206040516020810390808403906000865af115801561058d573d6000803e3d6000fd5b5050604051601f190151600160a060020a038b81169082161498509250610b059050565b60038660088111156105bf57fe5b141561076b57875160408051808201909152601281527f4c454e4754485f36365f5245515549524544000000000000000000000000000060208201529060411461061f5760405160e560020a62461bcd0281526004016102699190611526565b5087600081518110151561062f57fe5b016020015160f860020a90819004810204945061064d886001610f4c565b935061065a886021610f4c565b925060016040805190810160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152508b6040516020018083805190602001908083835b602083106106c75780518252601f1990920191602091820191016106a8565b51815160209384036101000a600019018019909216911617905292019384525060408051808503815293820190819052835193945092839250908401908083835b602083106107275780518252601f199092019160209182019101610708565b51815160209384036101000a6000190180199092169116179052604080519290940182900382206000835291019283905261056994509250899189915088906114f1565b600486600881111561077957fe5b14156107eb57875160408051808201909152601181527f4c454e4754485f315f5245515549524544000000000000000000000000000000602082015290156107d75760405160e560020a62461bcd0281526004016102699190611526565b50600160a060020a03891633149650610b05565b60058660088111156107f957fe5b141561089f576040517f1626ba7e000000000000000000000000000000000000000000000000000000008152600160a060020a038a1690631626ba7e90610846908d908c906004016114d1565b602060405180830381600087803b15801561086057600080fd5b505af1158015610874573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610898919081019061125f565b9650610b05565b60068660088111156108ad57fe5b1415610940576108bc88610fe0565b600160a060020a03808b1660009081526001602090815260408083209385168352929052205490915060ff1615156108f75760009650610b05565b6040517f93634702000000000000000000000000000000000000000000000000000000008152600160a060020a03821690639363470290610846908d908d908d9060040161149b565b600786600881111561094e57fe5b141561097f5760008a815260208181526040808320600160a060020a038d16845290915290205460ff169650610b05565b600886600881111561098d57fe5b1415610a7857875160408051808201909152601281527f4c454e4754485f36365f524551554952454400000000000000000000000000006020820152906041146109ed5760405160e560020a62461bcd0281526004016102699190611526565b508760008151811015156109fd57fe5b016020015160f860020a908190048102049450610a1b886001610f4c565b9350610a28886021610f4c565b604080518082018252601b8082527f19457468657265756d205369676e6564204d6573736167653a0a4100000000006020808401918252935194975060019492938f9301918291908083836106c7565b6007866008811115610a8657fe5b1415610ab75760008a815260208181526040808320600160a060020a038d16845290915290205460ff169650610b05565b604080518082018252601581527f5349474e41545552455f554e535550504f5254454400000000000000000000006020820152905160e560020a62461bcd0281526102699190600401611526565b5050505050509392505050565b6000610b1f84848461033a565b949350505050565b60035460408051808201909152601281527f5245454e5452414e43595f494c4c4547414c00000000000000000000000000006020820152600091600160a060020a031615610b8b5760405160e560020a62461bcd0281526004016102699190611526565b5030868887876040516020018086600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140185600160a060020a0316600160a060020a03166c010000000000000000000000000281526014018481526020018383808284378201915050955050505050506040516020818303038152906040526040518082805190602001908083835b60208310610c3c5780518252601f199092019160209182019101610c1d565b51815160209384036101000a60001901801990921691161790526040805192909401829003822060008181526002835285902054838601909552600f83527f494e56414c49445f54585f48415348000000000000000000000000000000000091830191909152955093505060ff16159050610ccd5760405160e560020a62461bcd0281526004016102699190611526565b50600160a060020a0386163314610d9a57610d19818785858080601f0160208091040260200160405190810160405280939291908181526020018383808284375061033a945050505050565b60408051808201909152601481527f494e56414c49445f54585f5349474e41545552450000000000000000000000006020820152901515610d705760405160e560020a62461bcd0281526004016102699190611526565b506003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0388161790555b60008181526002602052604090819020805460ff191660011790555130908690869080838380828437820191505092505050600060405180830381855af460408051808201909152601081527f4641494c45445f455845435554494f4e000000000000000000000000000000006020820152925015159050610e325760405160e560020a62461bcd0281526004016102699190611526565b50506003805473ffffffffffffffffffffffffffffffffffffffff19169055505050505050565b600354600160a060020a031681565b6003546000908190600160a060020a031615610e8f57600354600160a060020a0316610e91565b335b92915050565b600080825111606060405190810160405280602181526020017f475245415445525f5448414e5f5a45524f5f4c454e4754485f5245515549524581526020017f4400000000000000000000000000000000000000000000000000000000000000815250901515610f1d5760405160e560020a62461bcd0281526004016102699190611526565b50815182906000198101908110610f3057fe5b01602001518251600019019092525060f860020a908190040290565b60008160200183511015606060405190810160405280602681526020017f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f524581526020017f5155495245440000000000000000000000000000000000000000000000000000815250901515610fd65760405160e560020a62461bcd0281526004016102699190611526565b5050016020015190565b6000601482511015606060405190810160405280602681526020017f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524581526020017f51554952454400000000000000000000000000000000000000000000000000008152509015156110685760405160e560020a62461bcd0281526004016102699190611526565b50611077826014845103611084565b8251601319019092525090565b60008160140183511015606060405190810160405280602681526020017f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524581526020017f515549524544000000000000000000000000000000000000000000000000000081525090151561110e5760405160e560020a62461bcd0281526004016102699190611526565b50500160140151600160a060020a031690565b600061112d823561158a565b9392505050565b600061112d8235611596565b600061112d8251611596565b600061112d823561159b565b600080601f8301841361116a57600080fd5b50813567ffffffffffffffff81111561118257600080fd5b60208301915083600182028301111561119a57600080fd5b9250929050565b6000601f820183136111b257600080fd5b81356111c56111c08261155e565b611537565b915080825260208301602083018583830111156111e157600080fd5b6111ec8382846115a4565b50505092915050565b6000806040838503121561120857600080fd5b60006112148585611121565b925050602061122585828601611121565b9150509250929050565b6000806040838503121561124257600080fd5b600061124e8585611121565b925050602061122585828601611134565b60006020828403121561127157600080fd5b6000610b1f8484611140565b60006020828403121561128f57600080fd5b6000610b1f848461114c565b600080604083850312156112ae57600080fd5b6000611214858561114c565b600080600080606085870312156112d057600080fd5b60006112dc878761114c565b94505060206112ed87828801611121565b935050604085013567ffffffffffffffff81111561130a57600080fd5b61131687828801611158565b95989497509550505050565b60008060006060848603121561133757600080fd5b6000611343868661114c565b935050602061135486828701611121565b925050604084013567ffffffffffffffff81111561137157600080fd5b61137d868287016111a1565b9150509250925092565b600080600080600080608087890312156113a057600080fd5b60006113ac898961114c565b96505060206113bd89828a01611121565b955050604087013567ffffffffffffffff8111156113da57600080fd5b6113e689828a01611158565b9450945050606087013567ffffffffffffffff81111561140557600080fd5b61141189828a01611158565b92509250509295509295509295565b6114298161158a565b82525050565b61142981611596565b6114298161159b565b600061144c82611586565b8084526114608160208601602086016115b0565b611469816115e0565b9093016020019392505050565b6114298161159e565b60208101610e918284611420565b60208101610e91828461142f565b606081016114a98286611438565b6114b66020830185611420565b81810360408301526114c88184611441565b95945050505050565b604081016114df8285611438565b8181036020830152610b1f8184611441565b608081016114ff8287611438565b61150c6020830186611476565b6115196040830185611438565b6114c86060830184611438565b6020808252810161112d8184611441565b60405181810167ffffffffffffffff8111828210171561155657600080fd5b604052919050565b600067ffffffffffffffff82111561157557600080fd5b506020601f91909101601f19160190565b5190565b600160a060020a031690565b151590565b90565b60ff1690565b82818337506000910152565b60005b838110156115cb5781810151838201526020016115b3565b838111156115da576000848401525b50505050565b601f01601f1916905600a265627a7a723058204abd33daf80ad2d2d4eec305c76ac9a479ed80ebc3a5671baa990a732a53a98f6c6578706572696d656e74616cf50037", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x98 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x3683EF8E DUP2 EQ PUSH2 0x9D JUMPI DUP1 PUSH4 0x642F2EAF EQ PUSH2 0xBF JUMPI DUP1 PUSH4 0x77FCCE68 EQ PUSH2 0xF5 JUMPI DUP1 PUSH4 0x7B8E3514 EQ PUSH2 0x115 JUMPI DUP1 PUSH4 0x82C174D0 EQ PUSH2 0x135 JUMPI DUP1 PUSH4 0x93634702 EQ PUSH2 0x155 JUMPI DUP1 PUSH4 0xABBA41CC EQ PUSH2 0x175 JUMPI DUP1 PUSH4 0xBFC8BFCE EQ PUSH2 0x195 JUMPI DUP1 PUSH4 0xEEA086BA EQ PUSH2 0x1B5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBD PUSH2 0xB8 CALLDATASIZE PUSH1 0x4 PUSH2 0x12BA JUMP JUMPDEST PUSH2 0x1D7 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDF PUSH2 0xDA CALLDATASIZE PUSH1 0x4 PUSH2 0x127D JUMP JUMPDEST PUSH2 0x2A3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xEC SWAP2 SWAP1 PUSH2 0x148D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x101 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBD PUSH2 0x110 CALLDATASIZE PUSH1 0x4 PUSH2 0x122F JUMP JUMPDEST PUSH2 0x2B8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x121 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDF PUSH2 0x130 CALLDATASIZE PUSH1 0x4 PUSH2 0x11F5 JUMP JUMPDEST PUSH2 0x2FD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x141 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDF PUSH2 0x150 CALLDATASIZE PUSH1 0x4 PUSH2 0x129B JUMP JUMPDEST PUSH2 0x31D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x161 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDF PUSH2 0x170 CALLDATASIZE PUSH1 0x4 PUSH2 0x1322 JUMP JUMPDEST PUSH2 0x33A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x181 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDF PUSH2 0x190 CALLDATASIZE PUSH1 0x4 PUSH2 0x1322 JUMP JUMPDEST PUSH2 0xB12 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBD PUSH2 0x1B0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1387 JUMP JUMPDEST PUSH2 0xB27 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1CA PUSH2 0xE59 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xEC SWAP2 SWAP1 PUSH2 0x147F JUMP JUMPDEST PUSH2 0x212 DUP5 DUP5 DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x33A SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x11 DUP2 MSTORE PUSH32 0x494E56414C49445F5349474E4154555245000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 ISZERO ISZERO PUSH2 0x272 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP4 AND DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C2 PUSH2 0xE68 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP7 SWAP1 SWAP4 AND DUP3 MSTORE SWAP5 SWAP1 SWAP5 MSTORE SWAP1 SWAP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 DUP2 MSTORE SWAP3 DUP2 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 MSTORE SWAP1 DUP2 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP9 MLOAD GT PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4C454E4754485F475245415445525F5448414E5F305F52455155495245440000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x3A2 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST POP PUSH2 0x3AC DUP9 PUSH2 0xE97 JUMP JUMPDEST PUSH1 0xF8 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x8 DUP2 GT ISZERO PUSH2 0x3C1 JUMPI INVALID JUMPDEST SWAP6 POP PUSH1 0x0 DUP7 PUSH1 0x8 DUP2 GT ISZERO PUSH2 0x3D1 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x425 JUMPI PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x11 DUP2 MSTORE PUSH32 0x5349474E41545552455F494C4C4547414C000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH2 0x269 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x1526 JUMP JUMPDEST PUSH1 0x1 DUP7 PUSH1 0x8 DUP2 GT ISZERO PUSH2 0x433 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x49B JUMPI DUP8 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x11 DUP2 MSTORE PUSH32 0x4C454E4754485F315F5245515549524544000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 ISZERO PUSH2 0x491 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST POP PUSH1 0x0 SWAP7 POP PUSH2 0xB05 JUMP JUMPDEST PUSH1 0x2 DUP7 PUSH1 0x8 DUP2 GT ISZERO PUSH2 0x4A9 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x5B1 JUMPI DUP8 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x12 DUP2 MSTORE PUSH32 0x4C454E4754485F36365F52455155495245440000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH1 0x41 EQ PUSH2 0x509 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST POP DUP8 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x519 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH1 0xF8 PUSH1 0x2 EXP SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0x537 DUP9 PUSH1 0x1 PUSH2 0xF4C JUMP JUMPDEST SWAP4 POP PUSH2 0x544 DUP9 PUSH1 0x21 PUSH2 0xF4C JUMP JUMPDEST SWAP3 POP PUSH1 0x1 DUP11 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x569 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x14F1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 PUSH1 0x0 DUP7 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x58D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP12 DUP2 AND SWAP1 DUP3 AND EQ SWAP9 POP SWAP3 POP PUSH2 0xB05 SWAP1 POP JUMP JUMPDEST PUSH1 0x3 DUP7 PUSH1 0x8 DUP2 GT ISZERO PUSH2 0x5BF JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x76B JUMPI DUP8 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x12 DUP2 MSTORE PUSH32 0x4C454E4754485F36365F52455155495245440000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH1 0x41 EQ PUSH2 0x61F JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST POP DUP8 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x62F JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH1 0xF8 PUSH1 0x2 EXP SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0x64D DUP9 PUSH1 0x1 PUSH2 0xF4C JUMP JUMPDEST SWAP4 POP PUSH2 0x65A DUP9 PUSH1 0x21 PUSH2 0xF4C JUMP JUMPDEST SWAP3 POP PUSH1 0x1 PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1C DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A333200000000 DUP2 MSTORE POP DUP12 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x6C7 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x6A8 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP4 DUP5 MSTORE POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP6 SUB DUP2 MSTORE SWAP4 DUP3 ADD SWAP1 DUP2 SWAP1 MSTORE DUP4 MLOAD SWAP4 SWAP5 POP SWAP3 DUP4 SWAP3 POP SWAP1 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x727 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x708 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 PUSH1 0x0 DUP4 MSTORE SWAP2 ADD SWAP3 DUP4 SWAP1 MSTORE PUSH2 0x569 SWAP5 POP SWAP3 POP DUP10 SWAP2 DUP10 SWAP2 POP DUP9 SWAP1 PUSH2 0x14F1 JUMP JUMPDEST PUSH1 0x4 DUP7 PUSH1 0x8 DUP2 GT ISZERO PUSH2 0x779 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x7EB JUMPI DUP8 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x11 DUP2 MSTORE PUSH32 0x4C454E4754485F315F5245515549524544000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 ISZERO PUSH2 0x7D7 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP10 AND CALLER EQ SWAP7 POP PUSH2 0xB05 JUMP JUMPDEST PUSH1 0x5 DUP7 PUSH1 0x8 DUP2 GT ISZERO PUSH2 0x7F9 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x89F JUMPI PUSH1 0x40 MLOAD PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP11 AND SWAP1 PUSH4 0x1626BA7E SWAP1 PUSH2 0x846 SWAP1 DUP14 SWAP1 DUP13 SWAP1 PUSH1 0x4 ADD PUSH2 0x14D1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x860 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x874 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x898 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x125F JUMP JUMPDEST SWAP7 POP PUSH2 0xB05 JUMP JUMPDEST PUSH1 0x6 DUP7 PUSH1 0x8 DUP2 GT ISZERO PUSH2 0x8AD JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x940 JUMPI PUSH2 0x8BC DUP9 PUSH2 0xFE0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP1 DUP12 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x8F7 JUMPI PUSH1 0x0 SWAP7 POP PUSH2 0xB05 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x9363470200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND SWAP1 PUSH4 0x93634702 SWAP1 PUSH2 0x846 SWAP1 DUP14 SWAP1 DUP14 SWAP1 DUP14 SWAP1 PUSH1 0x4 ADD PUSH2 0x149B JUMP JUMPDEST PUSH1 0x7 DUP7 PUSH1 0x8 DUP2 GT ISZERO PUSH2 0x94E JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x97F JUMPI PUSH1 0x0 DUP11 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP14 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP7 POP PUSH2 0xB05 JUMP JUMPDEST PUSH1 0x8 DUP7 PUSH1 0x8 DUP2 GT ISZERO PUSH2 0x98D JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xA78 JUMPI DUP8 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x12 DUP2 MSTORE PUSH32 0x4C454E4754485F36365F52455155495245440000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH1 0x41 EQ PUSH2 0x9ED JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST POP DUP8 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x9FD JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH1 0xF8 PUSH1 0x2 EXP SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0xA1B DUP9 PUSH1 0x1 PUSH2 0xF4C JUMP JUMPDEST SWAP4 POP PUSH2 0xA28 DUP9 PUSH1 0x21 PUSH2 0xF4C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1B DUP1 DUP3 MSTORE PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A410000000000 PUSH1 0x20 DUP1 DUP5 ADD SWAP2 DUP3 MSTORE SWAP4 MLOAD SWAP5 SWAP8 POP PUSH1 0x1 SWAP5 SWAP3 SWAP4 DUP16 SWAP4 ADD SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 PUSH2 0x6C7 JUMP JUMPDEST PUSH1 0x7 DUP7 PUSH1 0x8 DUP2 GT ISZERO PUSH2 0xA86 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xAB7 JUMPI PUSH1 0x0 DUP11 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP14 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP7 POP PUSH2 0xB05 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x15 DUP2 MSTORE PUSH32 0x5349474E41545552455F554E535550504F525445440000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH2 0x269 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x1526 JUMP JUMPDEST POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB1F DUP5 DUP5 DUP5 PUSH2 0x33A JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x12 DUP2 MSTORE PUSH32 0x5245454E5452414E43595F494C4C4547414C0000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND ISZERO PUSH2 0xB8B JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST POP ADDRESS DUP7 DUP9 DUP8 DUP8 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP7 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH13 0x1000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x14 ADD DUP6 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH13 0x1000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x14 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY DUP3 ADD SWAP2 POP POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xC3C JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xC1D JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 DUP4 MSTORE DUP6 SWAP1 KECCAK256 SLOAD DUP4 DUP7 ADD SWAP1 SWAP6 MSTORE PUSH1 0xF DUP4 MSTORE PUSH32 0x494E56414C49445F54585F484153480000000000000000000000000000000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP6 POP SWAP4 POP POP PUSH1 0xFF AND ISZERO SWAP1 POP PUSH2 0xCCD JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP7 AND CALLER EQ PUSH2 0xD9A JUMPI PUSH2 0xD19 DUP2 DUP8 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x33A SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH32 0x494E56414C49445F54585F5349474E4154555245000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 ISZERO ISZERO PUSH2 0xD70 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST POP PUSH1 0x3 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP9 AND OR SWAP1 SSTORE JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD ADDRESS SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP1 DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY DUP3 ADD SWAP2 POP POP SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH32 0x4641494C45445F455845435554494F4E00000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP3 POP ISZERO ISZERO SWAP1 POP PUSH2 0xE32 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST POP POP PUSH1 0x3 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 SSTORE POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND ISZERO PUSH2 0xE8F JUMPI PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0xE91 JUMP JUMPDEST CALLER JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x475245415445525F5448414E5F5A45524F5F4C454E4754485F52455155495245 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4400000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0xF1D JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST POP DUP2 MLOAD DUP3 SWAP1 PUSH1 0x0 NOT DUP2 ADD SWAP1 DUP2 LT PUSH2 0xF30 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD DUP3 MLOAD PUSH1 0x0 NOT ADD SWAP1 SWAP3 MSTORE POP PUSH1 0xF8 PUSH1 0x2 EXP SWAP1 DUP2 SWAP1 DIV MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD DUP4 MLOAD LT ISZERO PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x475245415445525F4F525F455155414C5F544F5F33325F4C454E4754485F5245 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0xFD6 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST POP POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x14 DUP3 MLOAD LT ISZERO PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x1068 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST POP PUSH2 0x1077 DUP3 PUSH1 0x14 DUP5 MLOAD SUB PUSH2 0x1084 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x13 NOT ADD SWAP1 SWAP3 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x110E JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x1526 JUMP JUMPDEST POP POP ADD PUSH1 0x14 ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x112D DUP3 CALLDATALOAD PUSH2 0x158A JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x112D DUP3 CALLDATALOAD PUSH2 0x1596 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x112D DUP3 MLOAD PUSH2 0x1596 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x112D DUP3 CALLDATALOAD PUSH2 0x159B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1F DUP4 ADD DUP5 SGT PUSH2 0x116A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1182 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x119A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x11B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x11C5 PUSH2 0x11C0 DUP3 PUSH2 0x155E JUMP JUMPDEST PUSH2 0x1537 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x11E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x11EC DUP4 DUP3 DUP5 PUSH2 0x15A4 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1208 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1214 DUP6 DUP6 PUSH2 0x1121 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x1225 DUP6 DUP3 DUP7 ADD PUSH2 0x1121 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1242 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x124E DUP6 DUP6 PUSH2 0x1121 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x1225 DUP6 DUP3 DUP7 ADD PUSH2 0x1134 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1271 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xB1F DUP5 DUP5 PUSH2 0x1140 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x128F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xB1F DUP5 DUP5 PUSH2 0x114C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x12AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1214 DUP6 DUP6 PUSH2 0x114C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x12D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x12DC DUP8 DUP8 PUSH2 0x114C JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x12ED DUP8 DUP3 DUP9 ADD PUSH2 0x1121 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x130A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1316 DUP8 DUP3 DUP9 ADD PUSH2 0x1158 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1337 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1343 DUP7 DUP7 PUSH2 0x114C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x1354 DUP7 DUP3 DUP8 ADD PUSH2 0x1121 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1371 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x137D DUP7 DUP3 DUP8 ADD PUSH2 0x11A1 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x13A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x13AC DUP10 DUP10 PUSH2 0x114C JUMP JUMPDEST SWAP7 POP POP PUSH1 0x20 PUSH2 0x13BD DUP10 DUP3 DUP11 ADD PUSH2 0x1121 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x13DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x13E6 DUP10 DUP3 DUP11 ADD PUSH2 0x1158 JUMP JUMPDEST SWAP5 POP SWAP5 POP POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1405 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1411 DUP10 DUP3 DUP11 ADD PUSH2 0x1158 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH2 0x1429 DUP2 PUSH2 0x158A JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x1429 DUP2 PUSH2 0x1596 JUMP JUMPDEST PUSH2 0x1429 DUP2 PUSH2 0x159B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x144C DUP3 PUSH2 0x1586 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x1460 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x15B0 JUMP JUMPDEST PUSH2 0x1469 DUP2 PUSH2 0x15E0 JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1429 DUP2 PUSH2 0x159E JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xE91 DUP3 DUP5 PUSH2 0x1420 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xE91 DUP3 DUP5 PUSH2 0x142F JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x14A9 DUP3 DUP7 PUSH2 0x1438 JUMP JUMPDEST PUSH2 0x14B6 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x1420 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x14C8 DUP2 DUP5 PUSH2 0x1441 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x14DF DUP3 DUP6 PUSH2 0x1438 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0xB1F DUP2 DUP5 PUSH2 0x1441 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x14FF DUP3 DUP8 PUSH2 0x1438 JUMP JUMPDEST PUSH2 0x150C PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x1476 JUMP JUMPDEST PUSH2 0x1519 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x1438 JUMP JUMPDEST PUSH2 0x14C8 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x1438 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x112D DUP2 DUP5 PUSH2 0x1441 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1556 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1575 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x15CB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x15B3 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x15DA JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 0x4a 0xbd CALLER 0xda 0xf8 EXP 0xd2 0xd2 0xd4 0xee 0xc3 SDIV 0xc7 PUSH11 0xC9A479ED80EBC3A5671BAA SWAP10 EXP PUSH20 0x2A53A98F6C6578706572696D656E74616CF50037 ", - "sourceMap": "759:412:9:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1723:275:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1723:275:0;;;;;;;;;;;945:45:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;945:45:1;;;;;;;;;;;;;;;;;;;;;;;;;2228:233:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2228:233:0;;;;;;;;;1324:71;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1324:71:0;;;;;;;;;1204:63;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1204:63:0;;;;;;;;;2826:6493;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2826:6493:0;;;;;;;;;852:317:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;852:317:9;;;;;;;;;1397:1380:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1397:1380:1;;;;;;;;;1042:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1042:36:1;;;;;;;;;;;;1723:275:0;1869:41;1886:4;1892:6;1900:9;;1869:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1869:16:0;;-1:-1:-1;;;;;1869:41:0:i;:::-;1924:17;;;;;;;;;;;;;;;;;;1848:103;;;;;;-1:-1:-1;;;;;1848:103:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1961:9:0;:15;;;;;;;;;;;-1:-1:-1;;;;;1961:23:0;;;;;;;;;;:30;;-1:-1:-1;;1961:30:0;1987:4;1961:30;;;1723:275::o;945:45:1:-;;;;;;;;;;;;;;;:::o;2228:233:0:-;2354:14;2371:26;:24;:26::i;:::-;-1:-1:-1;;;;;2407:25:0;;;;;;;:17;:25;;;;;;;;:36;;;;;;;;;;;;;:47;;-1:-1:-1;;2407:47:0;;;;;;;;;;-1:-1:-1;2228:233:0:o;1324:71::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1204:63::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;2826:6493::-;2981:12;3282:27;3416:7;3433:9;3452;3471:17;7093;3162:1;3143:9;:16;:20;3177:30;;;;;;;;;;;;;;;;;;3122:95;;;;;;;-1:-1:-1;;;;;3122:95:0;;;;;;;;;;;3332:22;3344:9;3332:11;:22::i;:::-;-1:-1:-1;;;3326:29:0;;3312:44;;;;;;;;;;3282:74;-1:-1:-1;3838:21:0;3821:13;:38;;;;;;;;;3817:5154;;;3882:17;;;;;;;;;;;;;;;;3875:25;;-1:-1:-1;;;;;3875:25:0;;;;3882:17;3875:25;;;;3817:5154;4182:21;4165:13;:38;;;;;;;;;4161:4810;;;4244:16;;4283:17;;;;;;;;;;;;;;;;;;4244:21;4219:95;;;;-1:-1:-1;;;;;4219:95:0;;;;;;;;;;-1:-1:-1;4338:5:0;;-1:-1:-1;4357:14:0;;4161:4810;4444:20;4427:13;:37;;;;;;;;;4423:4548;;;4505:16;;4545:18;;;;;;;;;;;;;;;;;;4525:2;4505:22;4480:97;;;;-1:-1:-1;;;;;4480:97:0;;;;;;;;;;;4601:9;4611:1;4601:12;;;;;;;;;;;;;;-1:-1:-1;;;4601:12:0;;;;;;4595:19;;-1:-1:-1;4632:25:0;4644:9;4655:1;4632:11;:25::i;:::-;4628:29;;4675:26;4687:9;4698:2;4675:11;:26::i;:::-;4671:30;;4727:24;4737:4;4743:1;4746;4749;4727:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;4727:24:0;;-1:-1:-1;;4727:24:0;;-1:-1:-1;;;;;4775:19:0;;;;;;;;-1:-1:-1;4727:24:0;-1:-1:-1;4808:14:0;;-1:-1:-1;4808:14:0;4423:4548;4899:21;4882:13;:38;;;;;;;;;4878:4093;;;4961:16;;5001:18;;;;;;;;;;;;;;;;;;4981:2;4961:22;4936:97;;;;-1:-1:-1;;;;;4936:97:0;;;;;;;;;;;5057:9;5067:1;5057:12;;;;;;;;;;;;;;-1:-1:-1;;;5057:12:0;;;;;;5051:19;;-1:-1:-1;5088:25:0;5100:9;5111:1;5088:11;:25::i;:::-;5084:29;;5131:26;5143:9;5154:2;5131:11;:26::i;:::-;5127:30;;5183:153;5237:20;;;;;;;;;;;;;;;;;;5259:4;5220:44;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;5220:44:0;;;;;-1:-1:-1;5220:44:0;;;26:21:-1;;;6:49;;5220:44:0;;;;;;;5210:55;;5220:44;;-1:-1:-1;5220:44:0;;;-1:-1:-1;5210:55:0;;;;;5220:44;5210:55;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;5210:55:0;;;;;;;;;;;;-1:-1:-1;5183:153:0;;;;;;;;;;-1:-1:-1;5210:55:0;-1:-1:-1;5283:1:0;;5302;;-1:-1:-1;5321:1:0;;5183:153;;4878:4093;5997:20;5980:13;:37;;;;;;;;;5976:2995;;;6058:16;;6097:17;;;;;;;;;;;;;;;;;;6058:21;6033:95;;;;-1:-1:-1;;;;;6033:95:0;;;;;;;;;;-1:-1:-1;;;;;;6152:20:0;;6162:10;6152:20;;-1:-1:-1;6186:14:0;;5976:2995;6370:20;6353:13;:37;;;;;;;;;6349:2622;;;6416:49;;;;;-1:-1:-1;;;;;6416:32:0;;;;;:49;;6449:4;;6455:9;;6416:49;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6416:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6416:49:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;6416:49:0;;;;;;;;;6406:59;-1:-1:-1;6479:14:0;;6349:2622;6992:23;6975:13;:40;;;;;;;;;6971:2000;;;7113:25;7128:9;7113:14;:25::i;:::-;-1:-1:-1;;;;;7210:25:0;;;;;;;:17;:25;;;;;;;;:36;;;;;;;;;;7093:45;;-1:-1:-1;7210:36:0;;7209:37;7205:88;;;7273:5;7266:12;;;;7205:88;7316:125;;;;;-1:-1:-1;;;;;7316:38:0;;;;;:125;;7372:4;;7394:6;;7418:9;;7316:125;;;;6971:2000;7577:23;7560:13;:40;;;;;;;;;7556:1415;;;7626:9;:15;;;;;;;;;;;-1:-1:-1;;;;;7626:23:0;;;;;;;;;;;;;-1:-1:-1;7663:14:0;;7556:1415;8243:20;8226:13;:37;;;;;;;;;8222:749;;;8304:16;;8344:18;;;;;;;;;;;;;;;;;;8324:2;8304:22;8279:97;;;;-1:-1:-1;;;;;8279:97:0;;;;;;;;;;;8400:9;8410:1;8400:12;;;;;;;;;;;;;;-1:-1:-1;;;8400:12:0;;;;;;8394:19;;-1:-1:-1;8431:25:0;8443:9;8454:1;8431:11;:25::i;:::-;8427:29;;8474:26;8486:9;8497:2;8474:11;:26::i;:::-;8580:23;;;;;;;;;;;;;;;;;;;;8563:47;;8470:30;;-1:-1:-1;8526:156:0;;8580:23;;8605:4;;8563:47;;;;8580:23;;8563:47;8580:23;36:153:-1;;8222:749:0;8860:23;8843:13;:40;;;;;;;;;8839:132;;;8909:9;:15;;;;;;;;;;;-1:-1:-1;;;;;8909:23:0;;;;;;;;;;;;;-1:-1:-1;8946:14:0;;8839:132;9290:21;;;;;;;;;;;;;;;;9283:29;;-1:-1:-1;;;;;9283:29:0;;;;9290:21;9283:29;;;;2826:6493;;;;;;;;;;;;:::o;852:317:9:-;1013:12;1051:87;1081:4;1099:6;1119:9;1051:16;:87::i;:::-;1041:97;852:317;-1:-1:-1;;;;852:317:9:o;1397:1380:1:-;1604:21;;1653:18;;;;;;;;;;;;;;;;;1730:23;;-1:-1:-1;;;;;1604:21:1;:35;1583:98;;;;-1:-1:-1;;;;;1583:98:1;;;;;;;;;;;1804:4;1823:6;1843:4;1861;;1766:109;;;;;;-1:-1:-1;;;;;1766:109:1;-1:-1:-1;;;;;1766:109:1;;;;;;;;-1:-1:-1;;;;;1766:109:1;-1:-1:-1;;;;;1766:109:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1766:109:1;;;1756:120;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1756:120:1;;;;;;;;;;;;-1:-1:-1;1963:29:1;;;:12;:29;;;;;;2006:15;;;;;;;;;;;;;;;;;1756:120;-1:-1:-1;1756:120:1;-1:-1:-1;;1963:29:1;;1962:30;;-1:-1:-1;1941:90:1;;;;-1:-1:-1;;;;;1941:90:1;;;;;;;;;;-1:-1:-1;;;;;;2117:20:1;;2127:10;2117:20;2113:309;;2212:52;2229:15;2246:6;2254:9;;2212:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2212:16:1;;-1:-1:-1;;;;;2212:52:1:i;:::-;2282:20;;;;;;;;;;;;;;;;;;2187:129;;;;;;-1:-1:-1;;;;;2187:129:1;;;;;;;;;;-1:-1:-1;2381:21:1;:30;;-1:-1:-1;;2381:30:1;-1:-1:-1;;;;;2381:30:1;;;;;2113:309;2463:29;;;;:12;:29;;;;;;;:36;;-1:-1:-1;;2463:36:1;2495:4;2463:36;;;2530:32;2538:4;;2557;;;;2530:32;2557:4;;;;2530:32;;;;;;;;;;;;;;;;;;;;;2576:16;;;;;;;;;;;;;;;;;;-1:-1:-1;2509:93:1;;;-1:-1:-1;2509:93:1;;;;-1:-1:-1;;;;;2509:93:1;;;;;;;;;;-1:-1:-1;;2736:21:1;:34;;-1:-1:-1;;2736:34:1;;;-1:-1:-1;;;;;;1397:1380:1:o;1042:36::-;;;-1:-1:-1;;;;;1042:36:1;;:::o;3221:241::-;3352:21;;3304:7;;;;-1:-1:-1;;;;;3352:21:1;:35;:72;;3403:21;;-1:-1:-1;;;;;3403:21:1;3352:72;;;3390:10;3352:72;3327:97;3221:241;-1:-1:-1;;3221:241:1:o;1520:446:10:-;1604:13;1665:1;1654;:8;:12;1680:33;;;;;;;;;;;;;;;;;;;;;;;1633:90;;;;;;;-1:-1:-1;;;;;1633:90:10;;;;;;;;;;-1:-1:-1;1773:8:10;;1771:1;;-1:-1:-1;;1773:12:10;;;1771:15;;;;;;;;;;1885:8;;-1:-1:-1;;1881:16:10;1910:17;;;-1:-1:-1;;;;1771:15:10;;;;;;1520:446::o;5639:488::-;5760:14;5823:5;5831:2;5823:10;5811:1;:8;:22;;5847:38;;;;;;;;;;;;;;;;;;;;;;;5790:105;;;;;;;-1:-1:-1;;;;;5790:105:10;;;;;;;;;;-1:-1:-1;;6074:13:10;5976:2;6074:13;6068:20;;5639:488::o;2161:480::-;2248:14;2311:2;2299:1;:8;:14;;2327:38;;;;;;;;;;;;;;;;;;;;;;;2278:97;;;;;;;-1:-1:-1;;;;;2278:97:10;;;;;;;;;;;2427:29;2439:1;2453:2;2442:1;:8;:13;2427:11;:29::i;:::-;2559:8;;-1:-1:-1;;2555:17:10;2585;;;-1:-1:-1;2418:38:10;2161:480::o;2855:884::-;2976:14;3039:5;3047:2;3039:10;3027:1;:8;:22;;3091:38;;;;;;;;;;;;;;;;;;;;;;;3006:133;;;;;;;-1:-1:-1;;;;;3006:133:10;;;;;;;;;;-1:-1:-1;;3641:13:10;3386:2;3641:13;3635:20;-1:-1:-1;;;;;3631:69:10;;2855:884::o;5:118:-1:-;;72:46;110:6;97:20;72:46;;;63:55;57:66;-1:-1;;;57:66;130:112;;194:43;229:6;216:20;194:43;;249:116;;324:36;352:6;346:13;324:36;;372:118;;439:46;477:6;464:20;439:46;;511:335;;;618:4;606:17;;602:27;-1:-1;592:2;;643:1;640;633:12;592:2;-1:-1;663:20;;703:18;692:30;;689:2;;;735:1;732;725:12;689:2;769:4;761:6;757:17;745:29;;819:3;812;804:6;800:16;790:8;786:31;783:40;780:2;;;836:1;833;826:12;780:2;585:261;;;;;;855:440;;949:4;937:17;;933:27;-1:-1;923:2;;974:1;971;964:12;923:2;1011:6;998:20;1033:64;1048:48;1089:6;1048:48;;;1033:64;;;1024:73;;1117:6;1110:5;1103:21;1153:4;1145:6;1141:17;1186:4;1179:5;1175:16;1221:3;1212:6;1207:3;1203:16;1200:25;1197:2;;;1238:1;1235;1228:12;1197:2;1248:41;1282:6;1277:3;1272;1248:41;;;916:379;;;;;;;;1428:366;;;1549:2;1537:9;1528:7;1524:23;1520:32;1517:2;;;1565:1;1562;1555:12;1517:2;1600:1;1617:53;1662:7;1642:9;1617:53;;;1607:63;;1579:97;1707:2;1725:53;1770:7;1761:6;1750:9;1746:22;1725:53;;;1715:63;;1686:98;1511:283;;;;;;1801:360;;;1919:2;1907:9;1898:7;1894:23;1890:32;1887:2;;;1935:1;1932;1925:12;1887:2;1970:1;1987:53;2032:7;2012:9;1987:53;;;1977:63;;1949:97;2077:2;2095:50;2137:7;2128:6;2117:9;2113:22;2095:50;;2168:257;;2280:2;2268:9;2259:7;2255:23;2251:32;2248:2;;;2296:1;2293;2286:12;2248:2;2331:1;2348:61;2401:7;2381:9;2348:61;;2432:241;;2536:2;2524:9;2515:7;2511:23;2507:32;2504:2;;;2552:1;2549;2542:12;2504:2;2587:1;2604:53;2649:7;2629:9;2604:53;;2680:366;;;2801:2;2789:9;2780:7;2776:23;2772:32;2769:2;;;2817:1;2814;2807:12;2769:2;2852:1;2869:53;2914:7;2894:9;2869:53;;3053:615;;;;;3210:2;3198:9;3189:7;3185:23;3181:32;3178:2;;;3226:1;3223;3216:12;3178:2;3261:1;3278:53;3323:7;3303:9;3278:53;;;3268:63;;3240:97;3368:2;3386:53;3431:7;3422:6;3411:9;3407:22;3386:53;;;3376:63;;3347:98;3504:2;3493:9;3489:18;3476:32;3528:18;3520:6;3517:30;3514:2;;;3560:1;3557;3550:12;3514:2;3588:64;3644:7;3635:6;3624:9;3620:22;3588:64;;;3172:496;;;;-1:-1;3570:82;-1:-1;;;;3172:496;3675:595;;;;3822:2;3810:9;3801:7;3797:23;3793:32;3790:2;;;3838:1;3835;3828:12;3790:2;3873:1;3890:53;3935:7;3915:9;3890:53;;;3880:63;;3852:97;3980:2;3998:53;4043:7;4034:6;4023:9;4019:22;3998:53;;;3988:63;;3959:98;4116:2;4105:9;4101:18;4088:32;4140:18;4132:6;4129:30;4126:2;;;4172:1;4169;4162:12;4126:2;4192:62;4246:7;4237:6;4226:9;4222:22;4192:62;;;4182:72;;4067:193;3784:486;;;;;;4277:865;;;;;;;4470:3;4458:9;4449:7;4445:23;4441:33;4438:2;;;4487:1;4484;4477:12;4438:2;4522:1;4539:53;4584:7;4564:9;4539:53;;;4529:63;;4501:97;4629:2;4647:53;4692:7;4683:6;4672:9;4668:22;4647:53;;;4637:63;;4608:98;4765:2;4754:9;4750:18;4737:32;4789:18;4781:6;4778:30;4775:2;;;4821:1;4818;4811:12;4775:2;4849:64;4905:7;4896:6;4885:9;4881:22;4849:64;;;4831:82;;;;4716:203;4978:2;4967:9;4963:18;4950:32;5002:18;4994:6;4991:30;4988:2;;;5034:1;5031;5024:12;4988:2;5062:64;5118:7;5109:6;5098:9;5094:22;5062:64;;;5044:82;;;;4929:203;4432:710;;;;;;;;;5149:110;5222:31;5247:5;5222:31;;;5217:3;5210:44;5204:55;;;5266:101;5333:28;5355:5;5333:28;;5374:110;5447:31;5472:5;5447:31;;5491:297;;5591:38;5623:5;5591:38;;;5646:6;5641:3;5634:19;5658:63;5714:6;5707:4;5702:3;5698:14;5691:4;5684:5;5680:16;5658:63;;;5753:29;5775:6;5753:29;;;5733:50;;;5746:4;5733:50;;5571:217;-1:-1;;;5571:217;6094:104;6163:29;6186:5;6163:29;;6205:193;6313:2;6298:18;;6327:61;6302:9;6361:6;6327:61;;6405:181;6507:2;6492:18;;6521:55;6496:9;6549:6;6521:55;;6593:479;6775:2;6760:18;;6789:61;6764:9;6823:6;6789:61;;;6861:62;6919:2;6908:9;6904:18;6895:6;6861:62;;;6971:9;6965:4;6961:20;6956:2;6945:9;6941:18;6934:48;6996:66;7057:4;7048:6;6996:66;;;6988:74;6746:326;-1:-1;;;;;6746:326;7079:378;7233:2;7218:18;;7247:61;7222:9;7281:6;7247:61;;;7356:9;7350:4;7346:20;7341:2;7330:9;7326:18;7319:48;7381:66;7442:4;7433:6;7381:66;;7464:489;7652:3;7637:19;;7667:61;7641:9;7701:6;7667:61;;;7739:58;7793:2;7782:9;7778:18;7769:6;7739:58;;;7808:62;7866:2;7855:9;7851:18;7842:6;7808:62;;;7881;7939:2;7928:9;7924:18;7915:6;7881:62;;7960:273;8084:2;8098:47;;;8069:18;;8159:64;8069:18;8209:6;8159:64;;8240:256;8302:2;8296:9;8328:17;;;8403:18;8388:34;;8424:22;;;8385:62;8382:2;;;8460:1;8457;8450:12;8382:2;8476;8469:22;8280:216;;-1:-1;8280:216;8503:258;;8646:18;8638:6;8635:30;8632:2;;;8678:1;8675;8668:12;8632:2;-1:-1;8751:4;8722;8699:17;;;;-1:-1;;8695:33;8741:15;;8569:192;8768:91;8842:12;;8826:33;8961:128;-1:-1;;;;;9030:54;;9013:76;9096:92;9169:13;9162:21;;9145:43;9195:79;9264:5;9247:27;9281:88;9359:4;9348:16;;9331:38;9783:145;9864:6;9859:3;9854;9841:30;-1:-1;9920:1;9902:16;;9895:27;9834:94;9937:268;10002:1;10009:101;10023:6;10020:1;10017:13;10009:101;;;10090:11;;;10084:18;10071:11;;;10064:39;10045:2;10038:10;10009:101;;;10125:6;10122:1;10119:13;10116:2;;;10190:1;10181:6;10176:3;10172:16;10165:27;10116:2;9986:219;;;;;10213:97;10301:2;10281:14;-1:-1;;10277:28;;10261:49" + "object": "0x6080604052600436106100ae5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416632624b2d981146100b35780633683ef8e146100de578063642f2eaf1461010057806377fcce681461012d5780637b8e35141461014d57806382c174d01461016d578063936347021461018d578063abba41cc146101ad578063bfc8bfce146101cd578063e306f779146101ed578063eea086ba14610202575b600080fd5b3480156100bf57600080fd5b506100c8610224565b6040516100d59190611938565b60405180910390f35b3480156100ea57600080fd5b506100fe6100f9366004611757565b61035a565b005b34801561010c57600080fd5b5061012061011b36600461171a565b610428565b6040516100d5919061192a565b34801561013957600080fd5b506100fe6101483660046116cc565b61043d565b34801561015957600080fd5b50610120610168366004611692565b610482565b34801561017957600080fd5b50610120610188366004611738565b6104a2565b34801561019957600080fd5b506101206101a83660046117bf565b6104c2565b3480156101b957600080fd5b506101206101c83660046117bf565b610d1d565b3480156101d957600080fd5b506100fe6101e8366004611824565b610d32565b3480156101f957600080fd5b506100c8610fd5565b34801561020e57600080fd5b50610217610fdb565b6040516100d5919061191c565b604080517f454950373132446f6d61696e28000000000000000000000000000000000000006020808301919091527f737472696e67206e616d652c0000000000000000000000000000000000000000602d8301527f737472696e672076657273696f6e2c000000000000000000000000000000000060398301527f6164647265737320766572696679696e67436f6e74726163740000000000000060488301527f2900000000000000000000000000000000000000000000000000000000000000606183015282516042818403018152606290920192839052815191929182918401908083835b6020831061032a5780518252601f19909201916020918201910161030b565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902081565b610395848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437506104c2945050505050565b60408051808201909152601181527f494e56414c49445f5349474e415455524500000000000000000000000000000060208201529015156103f55760405160e560020a62461bcd0281526004016103ec91906119f9565b60405180910390fd5b5050506000918252600160208181526040808520600160a060020a0390941685529290529120805460ff19169091179055565b60036020526000908152604090205460ff1681565b6000610447610fea565b600160a060020a03908116600090815260026020908152604080832096909316825294909452909220805460ff191691151591909117905550565b600260209081526000928352604080842090915290825290205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b60008060008060008060008060008951116040805190810160405280601e81526020017f4c454e4754485f475245415445525f5448414e5f305f5245515549524544000081525090151561052c5760405160e560020a62461bcd0281526004016103ec91906119f9565b5061053689611019565b60408051808201909152601581527f5349474e41545552455f554e535550504f525445440000000000000000000000602082015260f860020a9091049750600960ff89161061059b5760405160e560020a62461bcd0281526004016103ec91906119f9565b508660ff1660098111156105ab57fe5b955060008660098111156105bb57fe5b141561060f57604080518082018252601181527f5349474e41545552455f494c4c4547414c0000000000000000000000000000006020820152905160e560020a62461bcd0281526103ec91906004016119f9565b600186600981111561061d57fe5b141561068557885160408051808201909152601181527f4c454e4754485f305f52455155495245440000000000000000000000000000006020820152901561067b5760405160e560020a62461bcd0281526004016103ec91906119f9565b5060009750610d0f565b600286600981111561069357fe5b141561079b57885160408051808201909152601281527f4c454e4754485f36355f524551554952454400000000000000000000000000006020820152906041146106f35760405160e560020a62461bcd0281526004016103ec91906119f9565b5088600081518110151561070357fe5b016020015160f860020a9081900481020494506107218960016110ce565b935061072e8960216110ce565b925060018b8686866040516000815260200160405260405161075394939291906119d1565b60206040516020810390808403906000865af1158015610777573d6000803e3d6000fd5b5050604051601f190151600160a060020a038c81169082161499509250610d0f9050565b60038660098111156107a957fe5b141561095557885160408051808201909152601281527f4c454e4754485f36355f524551554952454400000000000000000000000000006020820152906041146108095760405160e560020a62461bcd0281526004016103ec91906119f9565b5088600081518110151561081957fe5b016020015160f860020a9081900481020494506108378960016110ce565b93506108448960216110ce565b925060016040805190810160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152508c6040516020018083805190602001908083835b602083106108b15780518252601f199092019160209182019101610892565b51815160209384036101000a600019018019909216911617905292019384525060408051808503815293820190819052835193945092839250908401908083835b602083106109115780518252601f1990920191602091820191016108f2565b51815160209384036101000a6000190180199092169116179052604080519290940182900382206000835291019283905261075394509250899189915088906119d1565b600486600981111561096357fe5b14156109d557885160408051808201909152601181527f4c454e4754485f305f5245515549524544000000000000000000000000000000602082015290156109c15760405160e560020a62461bcd0281526004016103ec91906119f9565b50600160a060020a038a1633149750610d0f565b60058660098111156109e357fe5b1415610a89576040517f1626ba7e000000000000000000000000000000000000000000000000000000008152600160a060020a038b1690631626ba7e90610a30908e908d9060040161197c565b602060405180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a8291908101906116fc565b9750610d0f565b6006866009811115610a9757fe5b1415610b2a57610aa689611162565b600160a060020a03808c1660009081526002602090815260408083209385168352929052205490915060ff161515610ae15760009750610d0f565b6040517f93634702000000000000000000000000000000000000000000000000000000008152600160a060020a03821690639363470290610a30908e908e908e90600401611946565b6007866009811115610b3857fe5b1415610b6b5760008b8152600160209081526040808320600160a060020a038e16845290915290205460ff169750610d0f565b6008866009811115610b7957fe5b1415610c8057885160408051808201909152601281527f4c454e4754485f36355f52455155495245440000000000000000000000000000602082015290604114610bd95760405160e560020a62461bcd0281526004016103ec91906119f9565b50886000815181101515610be957fe5b016020015160f860020a908190048102049450610c078960016110ce565b9350610c148960216110ce565b925060016040805190810160405280601b81526020017f19457468657265756d205369676e6564204d6573736167653a0a2000000000008152508c604051602001808380519060200190808383602083106108b15780518252601f199092019160209182019101610892565b6007866009811115610c8e57fe5b1415610cc15760008b8152600160209081526040808320600160a060020a038e16845290915290205460ff169750610d0f565b604080518082018252601581527f5349474e41545552455f554e535550504f5254454400000000000000000000006020820152905160e560020a62461bcd0281526103ec91906004016119f9565b505050505050509392505050565b6000610d2a8484846104c2565b949350505050565b60045460408051808201909152601281527f5245454e5452414e43595f494c4c4547414c00000000000000000000000000006020820152600091600160a060020a031615610d965760405160e560020a62461bcd0281526004016103ec91906119f9565b50610dda610dd5888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843750611206945050505050565b611419565b600081815260036020908152604091829020548251808401909352600f83527f494e56414c49445f54585f484153480000000000000000000000000000000000918301919091529192509060ff1615610e495760405160e560020a62461bcd0281526004016103ec91906119f9565b50600160a060020a0386163314610f1657610e95818785858080601f016020809104026020016040519081016040528093929190818152602001838380828437506104c2945050505050565b60408051808201909152601481527f494e56414c49445f54585f5349474e41545552450000000000000000000000006020820152901515610eec5760405160e560020a62461bcd0281526004016103ec91906119f9565b506004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0388161790555b60008181526003602052604090819020805460ff191660011790555130908690869080838380828437820191505092505050600060405180830381855af460408051808201909152601081527f4641494c45445f455845435554494f4e000000000000000000000000000000006020820152925015159050610fae5760405160e560020a62461bcd0281526004016103ec91906119f9565b50506004805473ffffffffffffffffffffffffffffffffffffffff19169055505050505050565b60005481565b600454600160a060020a031681565b6004546000908190600160a060020a03161561101157600454600160a060020a0316611013565b335b92915050565b600080825111606060405190810160405280602181526020017f475245415445525f5448414e5f5a45524f5f4c454e4754485f5245515549524581526020017f440000000000000000000000000000000000000000000000000000000000000081525090151561109f5760405160e560020a62461bcd0281526004016103ec91906119f9565b508151829060001981019081106110b257fe5b01602001518251600019019092525060f860020a908190040290565b60008160200183511015606060405190810160405280602681526020017f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f524581526020017f51554952454400000000000000000000000000000000000000000000000000008152509015156111585760405160e560020a62461bcd0281526004016103ec91906119f9565b5050016020015190565b6000601482511015606060405190810160405280602681526020017f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524581526020017f51554952454400000000000000000000000000000000000000000000000000008152509015156111ea5760405160e560020a62461bcd0281526004016103ec91906119f9565b506111f9826014845103611521565b8251601319019092525090565b604080517f5a65726f45785472616e73616374696f6e2800000000000000000000000000006020808301919091527f75696e743235362073616c742c0000000000000000000000000000000000000060328301527f61646472657373207369676e65722c0000000000000000000000000000000000603f8301527f6279746573206461746100000000000000000000000000000000000000000000604e8301527f29000000000000000000000000000000000000000000000000000000000000006058830152825160398184030181526059909201928390528151600093918291908401908083835b6020831061130e5780518252601f1990920191602091820191016112ef565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390208484846040518082805190602001908083835b6020831061136d5780518252601f19909201916020918201910161134e565b51815160209384036101000a60001901801990921691161790526040519190930181900381206113a798979695509350909101905061199c565b6040516020818303038152906040526040518082805190602001908083835b602083106113e55780518252601f1990920191602091820191016113c6565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120979650505050505050565b60006040805190810160405280600281526020017f1901000000000000000000000000000000000000000000000000000000000000815250600054836040516020018084805190602001908083835b602083106114875780518252601f199092019160209182019101611468565b51815160209384036101000a6000190180199092169116179052920194855250838101929092525060408051808403830181529281019081905282519293509182918401908083835b602083106114ef5780518252601f1990920191602091820191016114d0565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912095945050505050565b60008160140183511015606060405190810160405280602681526020017f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524581526020017f51554952454400000000000000000000000000000000000000000000000000008152509015156115ab5760405160e560020a62461bcd0281526004016103ec91906119f9565b50500160140151600160a060020a031690565b60006115ca8235611a5d565b9392505050565b60006115ca8235611a69565b60006115ca8251611a69565b60006115ca8235611a6e565b600080601f8301841361160757600080fd5b50813567ffffffffffffffff81111561161f57600080fd5b60208301915083600182028301111561163757600080fd5b9250929050565b6000601f8201831361164f57600080fd5b813561166261165d82611a31565b611a0a565b9150808252602083016020830185838301111561167e57600080fd5b611689838284611a77565b50505092915050565b600080604083850312156116a557600080fd5b60006116b185856115be565b92505060206116c2858286016115be565b9150509250929050565b600080604083850312156116df57600080fd5b60006116eb85856115be565b92505060206116c2858286016115d1565b60006020828403121561170e57600080fd5b6000610d2a84846115dd565b60006020828403121561172c57600080fd5b6000610d2a84846115e9565b6000806040838503121561174b57600080fd5b60006116b185856115e9565b6000806000806060858703121561176d57600080fd5b600061177987876115e9565b945050602061178a878288016115be565b935050604085013567ffffffffffffffff8111156117a757600080fd5b6117b3878288016115f5565b95989497509550505050565b6000806000606084860312156117d457600080fd5b60006117e086866115e9565b93505060206117f1868287016115be565b925050604084013567ffffffffffffffff81111561180e57600080fd5b61181a8682870161163e565b9150509250925092565b6000806000806000806080878903121561183d57600080fd5b600061184989896115e9565b965050602061185a89828a016115be565b955050604087013567ffffffffffffffff81111561187757600080fd5b61188389828a016115f5565b9450945050606087013567ffffffffffffffff8111156118a257600080fd5b6118ae89828a016115f5565b92509250509295509295509295565b6118c681611a5d565b82525050565b6118c681611a69565b6118c681611a6e565b60006118e982611a59565b8084526118fd816020860160208601611a83565b61190681611ab3565b9093016020019392505050565b6118c681611a71565b6020810161101382846118bd565b6020810161101382846118cc565b6020810161101382846118d5565b6060810161195482866118d5565b61196160208301856118bd565b818103604083015261197381846118de565b95945050505050565b6040810161198a82856118d5565b8181036020830152610d2a81846118de565b608081016119aa82876118d5565b6119b760208301866118d5565b6119c460408301856118bd565b61197360608301846118d5565b608081016119df82876118d5565b6119ec6020830186611913565b6119c460408301856118d5565b602080825281016115ca81846118de565b60405181810167ffffffffffffffff81118282101715611a2957600080fd5b604052919050565b600067ffffffffffffffff821115611a4857600080fd5b506020601f91909101601f19160190565b5190565b600160a060020a031690565b151590565b90565b60ff1690565b82818337506000910152565b60005b83811015611a9e578181015183820152602001611a86565b83811115611aad576000848401525b50505050565b601f01601f1916905600a265627a7a72305820b1f75823f1e62a7c99f1712cce44f57e2fa098edd65b9d0b98b92d3f0392446f6c6578706572696d656e74616cf50037", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xAE JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x2624B2D9 DUP2 EQ PUSH2 0xB3 JUMPI DUP1 PUSH4 0x3683EF8E EQ PUSH2 0xDE JUMPI DUP1 PUSH4 0x642F2EAF EQ PUSH2 0x100 JUMPI DUP1 PUSH4 0x77FCCE68 EQ PUSH2 0x12D JUMPI DUP1 PUSH4 0x7B8E3514 EQ PUSH2 0x14D JUMPI DUP1 PUSH4 0x82C174D0 EQ PUSH2 0x16D JUMPI DUP1 PUSH4 0x93634702 EQ PUSH2 0x18D JUMPI DUP1 PUSH4 0xABBA41CC EQ PUSH2 0x1AD JUMPI DUP1 PUSH4 0xBFC8BFCE EQ PUSH2 0x1CD JUMPI DUP1 PUSH4 0xE306F779 EQ PUSH2 0x1ED JUMPI DUP1 PUSH4 0xEEA086BA EQ PUSH2 0x202 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC8 PUSH2 0x224 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD5 SWAP2 SWAP1 PUSH2 0x1938 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFE PUSH2 0xF9 CALLDATASIZE PUSH1 0x4 PUSH2 0x1757 JUMP JUMPDEST PUSH2 0x35A JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0x11B CALLDATASIZE PUSH1 0x4 PUSH2 0x171A JUMP JUMPDEST PUSH2 0x428 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD5 SWAP2 SWAP1 PUSH2 0x192A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x139 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFE PUSH2 0x148 CALLDATASIZE PUSH1 0x4 PUSH2 0x16CC JUMP JUMPDEST PUSH2 0x43D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x159 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0x168 CALLDATASIZE PUSH1 0x4 PUSH2 0x1692 JUMP JUMPDEST PUSH2 0x482 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x179 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0x188 CALLDATASIZE PUSH1 0x4 PUSH2 0x1738 JUMP JUMPDEST PUSH2 0x4A2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x199 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0x1A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x17BF JUMP JUMPDEST PUSH2 0x4C2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0x1C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x17BF JUMP JUMPDEST PUSH2 0xD1D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFE PUSH2 0x1E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1824 JUMP JUMPDEST PUSH2 0xD32 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC8 PUSH2 0xFD5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x20E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x217 PUSH2 0xFDB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD5 SWAP2 SWAP1 PUSH2 0x191C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x454950373132446F6D61696E2800000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x737472696E67206E616D652C0000000000000000000000000000000000000000 PUSH1 0x2D DUP4 ADD MSTORE PUSH32 0x737472696E672076657273696F6E2C0000000000000000000000000000000000 PUSH1 0x39 DUP4 ADD MSTORE PUSH32 0x6164647265737320766572696679696E67436F6E747261637400000000000000 PUSH1 0x48 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x61 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x42 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x62 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD SWAP2 SWAP3 SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x32A JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x30B JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP2 JUMP JUMPDEST PUSH2 0x395 DUP5 DUP5 DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x4C2 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x11 DUP2 MSTORE PUSH32 0x494E56414C49445F5349474E4154555245000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 ISZERO ISZERO PUSH2 0x3F5 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP6 KECCAK256 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP5 AND DUP6 MSTORE SWAP3 SWAP1 MSTORE SWAP2 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x447 PUSH2 0xFEA JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP7 SWAP1 SWAP4 AND DUP3 MSTORE SWAP5 SWAP1 SWAP5 MSTORE SWAP1 SWAP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP10 MLOAD GT PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4C454E4754485F475245415445525F5448414E5F305F52455155495245440000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x52C JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP PUSH2 0x536 DUP10 PUSH2 0x1019 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x15 DUP2 MSTORE PUSH32 0x5349474E41545552455F554E535550504F525445440000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xF8 PUSH1 0x2 EXP SWAP1 SWAP2 DIV SWAP8 POP PUSH1 0x9 PUSH1 0xFF DUP10 AND LT PUSH2 0x59B JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP DUP7 PUSH1 0xFF AND PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x5AB JUMPI INVALID JUMPDEST SWAP6 POP PUSH1 0x0 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x5BB JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x60F JUMPI PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x11 DUP2 MSTORE PUSH32 0x5349474E41545552455F494C4C4547414C000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH2 0x3EC SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x19F9 JUMP JUMPDEST PUSH1 0x1 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x61D JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x685 JUMPI DUP9 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x11 DUP2 MSTORE PUSH32 0x4C454E4754485F305F5245515549524544000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 ISZERO PUSH2 0x67B JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP PUSH1 0x0 SWAP8 POP PUSH2 0xD0F JUMP JUMPDEST PUSH1 0x2 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x693 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x79B JUMPI DUP9 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x12 DUP2 MSTORE PUSH32 0x4C454E4754485F36355F52455155495245440000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH1 0x41 EQ PUSH2 0x6F3 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x703 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH1 0xF8 PUSH1 0x2 EXP SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0x721 DUP10 PUSH1 0x1 PUSH2 0x10CE JUMP JUMPDEST SWAP4 POP PUSH2 0x72E DUP10 PUSH1 0x21 PUSH2 0x10CE JUMP JUMPDEST SWAP3 POP PUSH1 0x1 DUP12 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x753 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x19D1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 PUSH1 0x0 DUP7 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x777 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP13 DUP2 AND SWAP1 DUP3 AND EQ SWAP10 POP SWAP3 POP PUSH2 0xD0F SWAP1 POP JUMP JUMPDEST PUSH1 0x3 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x7A9 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x955 JUMPI DUP9 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x12 DUP2 MSTORE PUSH32 0x4C454E4754485F36355F52455155495245440000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH1 0x41 EQ PUSH2 0x809 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x819 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH1 0xF8 PUSH1 0x2 EXP SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0x837 DUP10 PUSH1 0x1 PUSH2 0x10CE JUMP JUMPDEST SWAP4 POP PUSH2 0x844 DUP10 PUSH1 0x21 PUSH2 0x10CE JUMP JUMPDEST SWAP3 POP PUSH1 0x1 PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1C DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A333200000000 DUP2 MSTORE POP DUP13 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x8B1 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x892 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP4 DUP5 MSTORE POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP6 SUB DUP2 MSTORE SWAP4 DUP3 ADD SWAP1 DUP2 SWAP1 MSTORE DUP4 MLOAD SWAP4 SWAP5 POP SWAP3 DUP4 SWAP3 POP SWAP1 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x911 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x8F2 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 PUSH1 0x0 DUP4 MSTORE SWAP2 ADD SWAP3 DUP4 SWAP1 MSTORE PUSH2 0x753 SWAP5 POP SWAP3 POP DUP10 SWAP2 DUP10 SWAP2 POP DUP9 SWAP1 PUSH2 0x19D1 JUMP JUMPDEST PUSH1 0x4 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x963 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x9D5 JUMPI DUP9 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x11 DUP2 MSTORE PUSH32 0x4C454E4754485F305F5245515549524544000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 ISZERO PUSH2 0x9C1 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP11 AND CALLER EQ SWAP8 POP PUSH2 0xD0F JUMP JUMPDEST PUSH1 0x5 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x9E3 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xA89 JUMPI PUSH1 0x40 MLOAD PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP12 AND SWAP1 PUSH4 0x1626BA7E SWAP1 PUSH2 0xA30 SWAP1 DUP15 SWAP1 DUP14 SWAP1 PUSH1 0x4 ADD PUSH2 0x197C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA4A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA5E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0xA82 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x16FC JUMP JUMPDEST SWAP8 POP PUSH2 0xD0F JUMP JUMPDEST PUSH1 0x6 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0xA97 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xB2A JUMPI PUSH2 0xAA6 DUP10 PUSH2 0x1162 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP1 DUP13 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO ISZERO PUSH2 0xAE1 JUMPI PUSH1 0x0 SWAP8 POP PUSH2 0xD0F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x9363470200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND SWAP1 PUSH4 0x93634702 SWAP1 PUSH2 0xA30 SWAP1 DUP15 SWAP1 DUP15 SWAP1 DUP15 SWAP1 PUSH1 0x4 ADD PUSH2 0x1946 JUMP JUMPDEST PUSH1 0x7 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0xB38 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xB6B JUMPI PUSH1 0x0 DUP12 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP15 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP8 POP PUSH2 0xD0F JUMP JUMPDEST PUSH1 0x8 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0xB79 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xC80 JUMPI DUP9 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x12 DUP2 MSTORE PUSH32 0x4C454E4754485F36355F52455155495245440000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH1 0x41 EQ PUSH2 0xBD9 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xBE9 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH1 0xF8 PUSH1 0x2 EXP SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0xC07 DUP10 PUSH1 0x1 PUSH2 0x10CE JUMP JUMPDEST SWAP4 POP PUSH2 0xC14 DUP10 PUSH1 0x21 PUSH2 0x10CE JUMP JUMPDEST SWAP3 POP PUSH1 0x1 PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1B DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A200000000000 DUP2 MSTORE POP DUP13 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x20 DUP4 LT PUSH2 0x8B1 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x892 JUMP JUMPDEST PUSH1 0x7 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0xC8E JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xCC1 JUMPI PUSH1 0x0 DUP12 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP15 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP8 POP PUSH2 0xD0F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x15 DUP2 MSTORE PUSH32 0x5349474E41545552455F554E535550504F525445440000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH2 0x3EC SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x19F9 JUMP JUMPDEST POP POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD2A DUP5 DUP5 DUP5 PUSH2 0x4C2 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x12 DUP2 MSTORE PUSH32 0x5245454E5452414E43595F494C4C4547414C0000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND ISZERO PUSH2 0xD96 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP PUSH2 0xDDA PUSH2 0xDD5 DUP9 DUP9 DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x1206 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1419 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0xF DUP4 MSTORE PUSH32 0x494E56414C49445F54585F484153480000000000000000000000000000000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 SWAP3 POP SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0xE49 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP7 AND CALLER EQ PUSH2 0xF16 JUMPI PUSH2 0xE95 DUP2 DUP8 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x4C2 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH32 0x494E56414C49445F54585F5349474E4154555245000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 ISZERO ISZERO PUSH2 0xEEC JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP PUSH1 0x4 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP9 AND OR SWAP1 SSTORE JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD ADDRESS SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP1 DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY DUP3 ADD SWAP2 POP POP SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH32 0x4641494C45445F455845435554494F4E00000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP3 POP ISZERO ISZERO SWAP1 POP PUSH2 0xFAE JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP POP PUSH1 0x4 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 SSTORE POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND ISZERO PUSH2 0x1011 JUMPI PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0x1013 JUMP JUMPDEST CALLER JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x475245415445525F5448414E5F5A45524F5F4C454E4754485F52455155495245 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4400000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x109F JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP DUP2 MLOAD DUP3 SWAP1 PUSH1 0x0 NOT DUP2 ADD SWAP1 DUP2 LT PUSH2 0x10B2 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD DUP3 MLOAD PUSH1 0x0 NOT ADD SWAP1 SWAP3 MSTORE POP PUSH1 0xF8 PUSH1 0x2 EXP SWAP1 DUP2 SWAP1 DIV MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD DUP4 MLOAD LT ISZERO PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x475245415445525F4F525F455155414C5F544F5F33325F4C454E4754485F5245 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x1158 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x14 DUP3 MLOAD LT ISZERO PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x11EA JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP PUSH2 0x11F9 DUP3 PUSH1 0x14 DUP5 MLOAD SUB PUSH2 0x1521 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x13 NOT ADD SWAP1 SWAP3 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x5A65726F45785472616E73616374696F6E280000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x75696E743235362073616C742C00000000000000000000000000000000000000 PUSH1 0x32 DUP4 ADD MSTORE PUSH32 0x61646472657373207369676E65722C0000000000000000000000000000000000 PUSH1 0x3F DUP4 ADD MSTORE PUSH32 0x6279746573206461746100000000000000000000000000000000000000000000 PUSH1 0x4E DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x58 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x39 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x59 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP4 SWAP2 DUP3 SWAP2 SWAP1 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x130E JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x12EF JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x136D JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x134E JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 PUSH2 0x13A7 SWAP9 SWAP8 SWAP7 SWAP6 POP SWAP4 POP SWAP1 SWAP2 ADD SWAP1 POP PUSH2 0x199C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x13E5 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x13C6 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x0 SLOAD DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1487 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1468 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP DUP4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP5 SUB DUP4 ADD DUP2 MSTORE SWAP3 DUP2 ADD SWAP1 DUP2 SWAP1 MSTORE DUP3 MLOAD SWAP3 SWAP4 POP SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x14EF JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x14D0 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x15AB JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST POP POP ADD PUSH1 0x14 ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15CA DUP3 CALLDATALOAD PUSH2 0x1A5D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15CA DUP3 CALLDATALOAD PUSH2 0x1A69 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15CA DUP3 MLOAD PUSH2 0x1A69 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15CA DUP3 CALLDATALOAD PUSH2 0x1A6E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1F DUP4 ADD DUP5 SGT PUSH2 0x1607 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x161F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x1637 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x164F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1662 PUSH2 0x165D DUP3 PUSH2 0x1A31 JUMP JUMPDEST PUSH2 0x1A0A JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x167E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1689 DUP4 DUP3 DUP5 PUSH2 0x1A77 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x16A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x16B1 DUP6 DUP6 PUSH2 0x15BE JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x16C2 DUP6 DUP3 DUP7 ADD PUSH2 0x15BE JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x16DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x16EB DUP6 DUP6 PUSH2 0x15BE JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x16C2 DUP6 DUP3 DUP7 ADD PUSH2 0x15D1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x170E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xD2A DUP5 DUP5 PUSH2 0x15DD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x172C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xD2A DUP5 DUP5 PUSH2 0x15E9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x174B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x16B1 DUP6 DUP6 PUSH2 0x15E9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x176D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1779 DUP8 DUP8 PUSH2 0x15E9 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x178A DUP8 DUP3 DUP9 ADD PUSH2 0x15BE JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x17A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x17B3 DUP8 DUP3 DUP9 ADD PUSH2 0x15F5 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x17D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x17E0 DUP7 DUP7 PUSH2 0x15E9 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x17F1 DUP7 DUP3 DUP8 ADD PUSH2 0x15BE JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x180E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x181A DUP7 DUP3 DUP8 ADD PUSH2 0x163E JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x183D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1849 DUP10 DUP10 PUSH2 0x15E9 JUMP JUMPDEST SWAP7 POP POP PUSH1 0x20 PUSH2 0x185A DUP10 DUP3 DUP11 ADD PUSH2 0x15BE JUMP JUMPDEST SWAP6 POP POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1877 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1883 DUP10 DUP3 DUP11 ADD PUSH2 0x15F5 JUMP JUMPDEST SWAP5 POP SWAP5 POP POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x18A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x18AE DUP10 DUP3 DUP11 ADD PUSH2 0x15F5 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH2 0x18C6 DUP2 PUSH2 0x1A5D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x18C6 DUP2 PUSH2 0x1A69 JUMP JUMPDEST PUSH2 0x18C6 DUP2 PUSH2 0x1A6E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x18E9 DUP3 PUSH2 0x1A59 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x18FD DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1A83 JUMP JUMPDEST PUSH2 0x1906 DUP2 PUSH2 0x1AB3 JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x18C6 DUP2 PUSH2 0x1A71 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1013 DUP3 DUP5 PUSH2 0x18BD JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1013 DUP3 DUP5 PUSH2 0x18CC JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1013 DUP3 DUP5 PUSH2 0x18D5 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x1954 DUP3 DUP7 PUSH2 0x18D5 JUMP JUMPDEST PUSH2 0x1961 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x18BD JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x1973 DUP2 DUP5 PUSH2 0x18DE JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x198A DUP3 DUP6 PUSH2 0x18D5 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0xD2A DUP2 DUP5 PUSH2 0x18DE JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x19AA DUP3 DUP8 PUSH2 0x18D5 JUMP JUMPDEST PUSH2 0x19B7 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x18D5 JUMP JUMPDEST PUSH2 0x19C4 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x18BD JUMP JUMPDEST PUSH2 0x1973 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x18D5 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x19DF DUP3 DUP8 PUSH2 0x18D5 JUMP JUMPDEST PUSH2 0x19EC PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x1913 JUMP JUMPDEST PUSH2 0x19C4 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x18D5 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x15CA DUP2 DUP5 PUSH2 0x18DE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1A29 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1A48 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1A9E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1A86 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1AAD JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 0xb1 0xf7 PC 0x23 CALL 0xe6 0x2a PUSH29 0x99F1712CCE44F57E2FA098EDD65B9D0B98B92D3F0392446F6C65787065 PUSH19 0x696D656E74616CF50037000000000000000000 ", + "sourceMap": "759:412:10:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;943:221:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;943:221:6;;;;;;;;;;;;;;;;;;;;1723:275:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1723:275:0;;;;;;;;;;;1030:45:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1030:45:1;;;;;;;;;;;;;;;;;2228:233:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2228:233:0;;;;;;;;;1324:71;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1324:71:0;;;;;;;;;1204:63;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1204:63:0;;;;;;;;;2826:6717;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2826:6717:0;;;;;;;;;852:317:10;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;852:317:10;;;;;;;;;2341:1282:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2341:1282:1;;;;;;;;;1219:33:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1219:33:6;;;;1127:36:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1127:36:1;;;;;;;;;;;;943:221:6;1015:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;1015:148:6;;;;;;;;1005:159;;1015:148;;;;;1005:159;;;;1015:148;1005:159;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1005:159:6;;;;;;;;;;;;;;;;943:221;:::o;1723:275:0:-;1869:41;1886:4;1892:6;1900:9;;1869:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1869:16:0;;-1:-1:-1;;;;;1869:41:0:i;:::-;1924:17;;;;;;;;;;;;;;;;;;1848:103;;;;;;-1:-1:-1;;;;;1848:103:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1961:15:0;;;;1987:4;1961:15;;;;;;;;-1:-1:-1;;;;;1961:23:0;;;;;;;;;;:30;;-1:-1:-1;;1961:30:0;;;;;;1723:275::o;1030:45:1:-;;;;;;;;;;;;;;;:::o;2228:233:0:-;2354:14;2371:26;:24;:26::i;:::-;-1:-1:-1;;;;;2407:25:0;;;;;;;:17;:25;;;;;;;;:36;;;;;;;;;;;;;:47;;-1:-1:-1;;2407:47:0;;;;;;;;;;-1:-1:-1;2228:233:0:o;1324:71::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1204:63::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2826:6717::-;2981:12;3269:22;3519:27;3640:7;3657:9;3676;3695:17;7317;3162:1;3143:9;:16;:20;3177:30;;;;;;;;;;;;;;;;;;3122:95;;;;;;;-1:-1:-1;;;;;3122:95:0;;;;;;;;;;;3300:22;3312:9;3300:11;:22::i;:::-;3423:21;;;;;;;;;;;;;;;;;-1:-1:-1;;;3294:29:0;;;;-1:-1:-1;3379:29:0;3354:55;;;;3333:121;;;;-1:-1:-1;;;;;3333:121:0;;;;;;;;;;;3563:16;3549:31;;;;;;;;;;3519:61;-1:-1:-1;4062:21:0;4045:13;:38;;;;;;;;;4041:5154;;;4106:17;;;;;;;;;;;;;;;;4099:25;;-1:-1:-1;;;;;4099:25:0;;;;4106:17;4099:25;;;;4041:5154;4406:21;4389:13;:38;;;;;;;;;4385:4810;;;4468:16;;4507:17;;;;;;;;;;;;;;;;;;4468:21;4443:95;;;;-1:-1:-1;;;;;4443:95:0;;;;;;;;;;-1:-1:-1;4562:5:0;;-1:-1:-1;4581:14:0;;4385:4810;4668:20;4651:13;:37;;;;;;;;;4647:4548;;;4729:16;;4769:18;;;;;;;;;;;;;;;;;;4749:2;4729:22;4704:97;;;;-1:-1:-1;;;;;4704:97:0;;;;;;;;;;;4825:9;4835:1;4825:12;;;;;;;;;;;;;;-1:-1:-1;;;4825:12:0;;;;;;4819:19;;-1:-1:-1;4856:25:0;4868:9;4879:1;4856:11;:25::i;:::-;4852:29;;4899:26;4911:9;4922:2;4899:11;:26::i;:::-;4895:30;;4951:24;4961:4;4967:1;4970;4973;4951:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;4951:24:0;;-1:-1:-1;;4951:24:0;;-1:-1:-1;;;;;4999:19:0;;;;;;;;-1:-1:-1;4951:24:0;-1:-1:-1;5032:14:0;;-1:-1:-1;5032:14:0;4647:4548;5123:21;5106:13;:38;;;;;;;;;5102:4093;;;5185:16;;5225:18;;;;;;;;;;;;;;;;;;5205:2;5185:22;5160:97;;;;-1:-1:-1;;;;;5160:97:0;;;;;;;;;;;5281:9;5291:1;5281:12;;;;;;;;;;;;;;-1:-1:-1;;;5281:12:0;;;;;;5275:19;;-1:-1:-1;5312:25:0;5324:9;5335:1;5312:11;:25::i;:::-;5308:29;;5355:26;5367:9;5378:2;5355:11;:26::i;:::-;5351:30;;5407:153;5461:20;;;;;;;;;;;;;;;;;;5483:4;5444:44;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;5444:44:0;;;;;-1:-1:-1;5444:44:0;;;26:21:-1;;;6:49;;5444:44:0;;;;;;;5434:55;;5444:44;;-1:-1:-1;5444:44:0;;;-1:-1:-1;5434:55:0;;;;;5444:44;5434:55;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;5434:55:0;;;;;;;;;;;;-1:-1:-1;5407:153:0;;;;;;;;;;-1:-1:-1;5434:55:0;-1:-1:-1;5507:1:0;;5526;;-1:-1:-1;5545:1:0;;5407:153;;5102:4093;6221:20;6204:13;:37;;;;;;;;;6200:2995;;;6282:16;;6321:17;;;;;;;;;;;;;;;;;;6282:21;6257:95;;;;-1:-1:-1;;;;;6257:95:0;;;;;;;;;;-1:-1:-1;;;;;;6376:20:0;;6386:10;6376:20;;-1:-1:-1;6410:14:0;;6200:2995;6594:20;6577:13;:37;;;;;;;;;6573:2622;;;6640:49;;;;;-1:-1:-1;;;;;6640:32:0;;;;;:49;;6673:4;;6679:9;;6640:49;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6640:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6640:49:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;6640:49:0;;;;;;;;;6630:59;-1:-1:-1;6703:14:0;;6573:2622;7216:23;7199:13;:40;;;;;;;;;7195:2000;;;7337:25;7352:9;7337:14;:25::i;:::-;-1:-1:-1;;;;;7434:25:0;;;;;;;:17;:25;;;;;;;;:36;;;;;;;;;;7317:45;;-1:-1:-1;7434:36:0;;7433:37;7429:88;;;7497:5;7490:12;;;;7429:88;7540:125;;;;;-1:-1:-1;;;;;7540:38:0;;;;;:125;;7596:4;;7618:6;;7642:9;;7540:125;;;;7195:2000;7801:23;7784:13;:40;;;;;;;;;7780:1415;;;7850:15;;;;:9;:15;;;;;;;;-1:-1:-1;;;;;7850:23:0;;;;;;;;;;;;;-1:-1:-1;7887:14:0;;7780:1415;8467:20;8450:13;:37;;;;;;;;;8446:749;;;8528:16;;8568:18;;;;;;;;;;;;;;;;;;8548:2;8528:22;8503:97;;;;-1:-1:-1;;;;;8503:97:0;;;;;;;;;;;8624:9;8634:1;8624:12;;;;;;;;;;;;;;-1:-1:-1;;;8624:12:0;;;;;;8618:19;;-1:-1:-1;8655:25:0;8667:9;8678:1;8655:11;:25::i;:::-;8651:29;;8698:26;8710:9;8721:2;8698:11;:26::i;:::-;8694:30;;8750:156;8804:23;;;;;;;;;;;;;;;;;;8829:4;8787:47;;;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;8446:749:0;9084:23;9067:13;:40;;;;;;;;;9063:132;;;9133:15;;;;:9;:15;;;;;;;;-1:-1:-1;;;;;9133:23:0;;;;;;;;;;;;;-1:-1:-1;9170:14:0;;9063:132;9514:21;;;;;;;;;;;;;;;;9507:29;;-1:-1:-1;;;;;9507:29:0;;;;9514:21;9507:29;;;;2826:6717;;;;;;;;;;;;;:::o;852:317:10:-;1013:12;1051:87;1081:4;1099:6;1119:9;1051:16;:87::i;:::-;1041:97;852:317;-1:-1:-1;;;;852:317:10:o;2341:1282:1:-;2548:21;;2597:18;;;;;;;;;;;;;;;;;2636:23;;-1:-1:-1;;;;;2548:21:1;:35;2527:98;;;;-1:-1:-1;;;;;2527:98:1;;;;;;;;;;;2662:60;2680:41;2702:4;2708:6;2716:4;;2680:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2680:21:1;;-1:-1:-1;;;;;2680:41:1:i;:::-;2662:17;:60::i;:::-;2809:29;;;;:12;:29;;;;;;;;;;2852:15;;;;;;;;;;;;;;;;;;;2636:86;;-1:-1:-1;2852:15:1;2809:29;;2808:30;2787:90;;;;-1:-1:-1;;;;;2787:90:1;;;;;;;;;;-1:-1:-1;;;;;;2963:20:1;;2973:10;2963:20;2959:309;;3058:52;3075:15;3092:6;3100:9;;3058:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3058:16:1;;-1:-1:-1;;;;;3058:52:1:i;:::-;3128:20;;;;;;;;;;;;;;;;;;3033:129;;;;;;-1:-1:-1;;;;;3033:129:1;;;;;;;;;;-1:-1:-1;3227:21:1;:30;;-1:-1:-1;;3227:30:1;-1:-1:-1;;;;;3227:30:1;;;;;2959:309;3309:29;;;;:12;:29;;;;;;;:36;;-1:-1:-1;;3309:36:1;3341:4;3309:36;;;3376:32;3384:4;;3403;;;;3376:32;3403:4;;;;3376:32;;;;;;;;;;;;;;;;;;;;;3422:16;;;;;;;;;;;;;;;;;;-1:-1:-1;3355:93:1;;;-1:-1:-1;3355:93:1;;;;-1:-1:-1;;;;;3355:93:1;;;;;;;;;;-1:-1:-1;;3582:21:1;:34;;-1:-1:-1;;3582:34:1;;;-1:-1:-1;;;;;;2341:1282:1:o;1219:33:6:-;;;;:::o;1127:36:1:-;;;-1:-1:-1;;;;;1127:36:1;;:::o;4067:241::-;4198:21;;4150:7;;;;-1:-1:-1;;;;;4198:21:1;:35;:72;;4249:21;;-1:-1:-1;;;;;4249:21:1;4198:72;;;4236:10;4198:72;4173:97;4067:241;-1:-1:-1;;4067:241:1:o;1520:446:11:-;1604:13;1665:1;1654;:8;:12;1680:33;;;;;;;;;;;;;;;;;;;;;;;1633:90;;;;;;;-1:-1:-1;;;;;1633:90:11;;;;;;;;;;-1:-1:-1;1773:8:11;;1771:1;;-1:-1:-1;;1773:12:11;;;1771:15;;;;;;;;;;1885:8;;-1:-1:-1;;1881:16:11;1910:17;;;-1:-1:-1;;;;1771:15:11;;;;;;1520:446::o;5639:488::-;5760:14;5823:5;5831:2;5823:10;5811:1;:8;:22;;5847:38;;;;;;;;;;;;;;;;;;;;;;;5790:105;;;;;;;-1:-1:-1;;;;;5790:105:11;;;;;;;;;;-1:-1:-1;;6074:13:11;5976:2;6074:13;6068:20;;5639:488::o;2161:480::-;2248:14;2311:2;2299:1;:8;:14;;2327:38;;;;;;;;;;;;;;;;;;;;;;;2278:97;;;;;;;-1:-1:-1;;;;;2278:97:11;;;;;;;;;;;2427:29;2439:1;2453:2;2442:1;:8;:13;2427:11;:29::i;:::-;2559:8;;-1:-1:-1;;2555:17:11;2585;;;-1:-1:-1;2418:38:11;2161:480::o;1717:306:1:-;1290:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;1290:139:1;;;;;;;;1280:150;;1837:7;;1290:139;;;1280:150;;;;;1290:139;1280:150;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1280:150:1;;;;;;;;;;;;;;;;1952:4;1970:6;2000:4;1990:15;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1990:15:1;;;;;;;;;;;1877:138;;;;;-1:-1:-1;1990:15:1;-1:-1:-1;1877:138:1;;;;-1:-1:-1;1877:138:1;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1877:138:1;;;1867:149;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;1867:149:1;;;;;;;;;;;;-1:-1:-1;;;;;;;1717:306:1:o;1737:205:6:-;1831:7;1888:13;;;;;;;;;;;;;;;;;;1903:18;;1923:10;1871:63;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1871:63:6;;;;;-1:-1:-1;1871:63:6;;;;;;;-1:-1:-1;1871:63:6;;;26:21:-1;;;22:32;;6:49;;1871:63:6;;;;;;;1861:74;;1871:63;;-1:-1:-1;1871:63:6;;;1861:74;;;;1871:63;1861:74;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;1861:74:6;;;;;;;;;;;;-1:-1:-1;;;;;1737:205:6:o;2855:884:11:-;2976:14;3039:5;3047:2;3039:10;3027:1;:8;:22;;3091:38;;;;;;;;;;;;;;;;;;;;;;;3006:133;;;;;;;-1:-1:-1;;;;;3006:133:11;;;;;;;;;;-1:-1:-1;;3641:13:11;3386:2;3641:13;3635:20;-1:-1:-1;;;;;3631:69:11;;2855:884::o;5:118:-1:-;;72:46;110:6;97:20;72:46;;;63:55;57:66;-1:-1;;;57:66;130:112;;194:43;229:6;216:20;194:43;;249:116;;324:36;352:6;346:13;324:36;;372:118;;439:46;477:6;464:20;439:46;;511:335;;;618:4;606:17;;602:27;-1:-1;592:2;;643:1;640;633:12;592:2;-1:-1;663:20;;703:18;692:30;;689:2;;;735:1;732;725:12;689:2;769:4;761:6;757:17;745:29;;819:3;812;804:6;800:16;790:8;786:31;783:40;780:2;;;836:1;833;826:12;780:2;585:261;;;;;;855:440;;949:4;937:17;;933:27;-1:-1;923:2;;974:1;971;964:12;923:2;1011:6;998:20;1033:64;1048:48;1089:6;1048:48;;;1033:64;;;1024:73;;1117:6;1110:5;1103:21;1153:4;1145:6;1141:17;1186:4;1179:5;1175:16;1221:3;1212:6;1207:3;1203:16;1200:25;1197:2;;;1238:1;1235;1228:12;1197:2;1248:41;1282:6;1277:3;1272;1248:41;;;916:379;;;;;;;;1428:366;;;1549:2;1537:9;1528:7;1524:23;1520:32;1517:2;;;1565:1;1562;1555:12;1517:2;1600:1;1617:53;1662:7;1642:9;1617:53;;;1607:63;;1579:97;1707:2;1725:53;1770:7;1761:6;1750:9;1746:22;1725:53;;;1715:63;;1686:98;1511:283;;;;;;1801:360;;;1919:2;1907:9;1898:7;1894:23;1890:32;1887:2;;;1935:1;1932;1925:12;1887:2;1970:1;1987:53;2032:7;2012:9;1987:53;;;1977:63;;1949:97;2077:2;2095:50;2137:7;2128:6;2117:9;2113:22;2095:50;;2168:257;;2280:2;2268:9;2259:7;2255:23;2251:32;2248:2;;;2296:1;2293;2286:12;2248:2;2331:1;2348:61;2401:7;2381:9;2348:61;;2432:241;;2536:2;2524:9;2515:7;2511:23;2507:32;2504:2;;;2552:1;2549;2542:12;2504:2;2587:1;2604:53;2649:7;2629:9;2604:53;;2680:366;;;2801:2;2789:9;2780:7;2776:23;2772:32;2769:2;;;2817:1;2814;2807:12;2769:2;2852:1;2869:53;2914:7;2894:9;2869:53;;3053:615;;;;;3210:2;3198:9;3189:7;3185:23;3181:32;3178:2;;;3226:1;3223;3216:12;3178:2;3261:1;3278:53;3323:7;3303:9;3278:53;;;3268:63;;3240:97;3368:2;3386:53;3431:7;3422:6;3411:9;3407:22;3386:53;;;3376:63;;3347:98;3504:2;3493:9;3489:18;3476:32;3528:18;3520:6;3517:30;3514:2;;;3560:1;3557;3550:12;3514:2;3588:64;3644:7;3635:6;3624:9;3620:22;3588:64;;;3172:496;;;;-1:-1;3570:82;-1:-1;;;;3172:496;3675:595;;;;3822:2;3810:9;3801:7;3797:23;3793:32;3790:2;;;3838:1;3835;3828:12;3790:2;3873:1;3890:53;3935:7;3915:9;3890:53;;;3880:63;;3852:97;3980:2;3998:53;4043:7;4034:6;4023:9;4019:22;3998:53;;;3988:63;;3959:98;4116:2;4105:9;4101:18;4088:32;4140:18;4132:6;4129:30;4126:2;;;4172:1;4169;4162:12;4126:2;4192:62;4246:7;4237:6;4226:9;4222:22;4192:62;;;4182:72;;4067:193;3784:486;;;;;;4277:865;;;;;;;4470:3;4458:9;4449:7;4445:23;4441:33;4438:2;;;4487:1;4484;4477:12;4438:2;4522:1;4539:53;4584:7;4564:9;4539:53;;;4529:63;;4501:97;4629:2;4647:53;4692:7;4683:6;4672:9;4668:22;4647:53;;;4637:63;;4608:98;4765:2;4754:9;4750:18;4737:32;4789:18;4781:6;4778:30;4775:2;;;4821:1;4818;4811:12;4775:2;4849:64;4905:7;4896:6;4885:9;4881:22;4849:64;;;4831:82;;;;4716:203;4978:2;4967:9;4963:18;4950:32;5002:18;4994:6;4991:30;4988:2;;;5034:1;5031;5024:12;4988:2;5062:64;5118:7;5109:6;5098:9;5094:22;5062:64;;;5044:82;;;;4929:203;4432:710;;;;;;;;;5149:110;5222:31;5247:5;5222:31;;;5217:3;5210:44;5204:55;;;5266:101;5333:28;5355:5;5333:28;;5374:110;5447:31;5472:5;5447:31;;5491:297;;5591:38;5623:5;5591:38;;;5646:6;5641:3;5634:19;5658:63;5714:6;5707:4;5702:3;5698:14;5691:4;5684:5;5680:16;5658:63;;;5753:29;5775:6;5753:29;;;5733:50;;;5746:4;5733:50;;5571:217;-1:-1;;;5571:217;6211:104;6280:29;6303:5;6280:29;;6322:193;6430:2;6415:18;;6444:61;6419:9;6478:6;6444:61;;6522:181;6624:2;6609:18;;6638:55;6613:9;6666:6;6638:55;;6710:193;6818:2;6803:18;;6832:61;6807:9;6866:6;6832:61;;6910:479;7092:2;7077:18;;7106:61;7081:9;7140:6;7106:61;;;7178:62;7236:2;7225:9;7221:18;7212:6;7178:62;;;7288:9;7282:4;7278:20;7273:2;7262:9;7258:18;7251:48;7313:66;7374:4;7365:6;7313:66;;;7305:74;7063:326;-1:-1;;;;;7063:326;7396:378;7550:2;7535:18;;7564:61;7539:9;7598:6;7564:61;;;7673:9;7667:4;7663:20;7658:2;7647:9;7643:18;7636:48;7698:66;7759:4;7750:6;7698:66;;7781:497;7973:3;7958:19;;7988:61;7962:9;8022:6;7988:61;;;8060:62;8118:2;8107:9;8103:18;8094:6;8060:62;;;8133;8191:2;8180:9;8176:18;8167:6;8133:62;;;8206;8264:2;8253:9;8249:18;8240:6;8206:62;;8285:489;8473:3;8458:19;;8488:61;8462:9;8522:6;8488:61;;;8560:58;8614:2;8603:9;8599:18;8590:6;8560:58;;;8629:62;8687:2;8676:9;8672:18;8663:6;8629:62;;8781:273;8905:2;8919:47;;;8890:18;;8980:64;8890:18;9030:6;8980:64;;9061:256;9123:2;9117:9;9149:17;;;9224:18;9209:34;;9245:22;;;9206:62;9203:2;;;9281:1;9278;9271:12;9203:2;9297;9290:22;9101:216;;-1:-1;9101:216;9324:258;;9467:18;9459:6;9456:30;9453:2;;;9499:1;9496;9489:12;9453:2;-1:-1;9572:4;9543;9520:17;;;;-1:-1;;9516:33;9562:15;;9390:192;9589:91;9663:12;;9647:33;9782:128;-1:-1;;;;;9851:54;;9834:76;9917:92;9990:13;9983:21;;9966:43;10016:79;10085:5;10068:27;10188:88;10266:4;10255:16;;10238:38;10690:145;10771:6;10766:3;10761;10748:30;-1:-1;10827:1;10809:16;;10802:27;10741:94;10844:268;10909:1;10916:101;10930:6;10927:1;10924:13;10916:101;;;10997:11;;;10991:18;10978:11;;;10971:39;10952:2;10945:10;10916:101;;;11032:6;11029:1;11026:13;11023:2;;;11097:1;11088:6;11083:3;11079:16;11072:27;11023:2;10893:219;;;;;11120:97;11208:2;11188:14;-1:-1;;11184:28;;11168:49" } } }, @@ -237,40 +265,44 @@ "current/protocol/Exchange/interfaces/IWallet.sol": { "id": 5 }, - "current/protocol/Exchange/libs/LibExchangeErrors.sol": { + "current/protocol/Exchange/libs/LibEIP712.sol": { "id": 6 }, - "current/protocol/Exchange/mixins/MSignatureValidator.sol": { + "current/protocol/Exchange/libs/LibExchangeErrors.sol": { "id": 7 }, - "current/protocol/Exchange/mixins/MTransactions.sol": { + "current/protocol/Exchange/mixins/MSignatureValidator.sol": { "id": 8 }, - "current/test/TestSignatureValidator/TestSignatureValidator.sol": { + "current/protocol/Exchange/mixins/MTransactions.sol": { "id": 9 }, - "current/utils/LibBytes/LibBytes.sol": { + "current/test/TestSignatureValidator/TestSignatureValidator.sol": { "id": 10 }, - "current/utils/LibMem/LibMem.sol": { + "current/utils/LibBytes/LibBytes.sol": { "id": 11 + }, + "current/utils/LibMem/LibMem.sol": { + "id": 12 } }, "sourceCodes": { - "current/protocol/Exchange/MixinSignatureValidator.sol": "/*\n\n Copyright 2018 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.4.24;\n\nimport \"../../utils/LibBytes/LibBytes.sol\";\nimport \"./libs/LibExchangeErrors.sol\";\nimport \"./mixins/MSignatureValidator.sol\";\nimport \"./mixins/MTransactions.sol\";\nimport \"./interfaces/IWallet.sol\";\nimport \"./interfaces/IValidator.sol\";\n\ncontract MixinSignatureValidator is\n LibBytes,\n LibExchangeErrors,\n MSignatureValidator,\n MTransactions\n{\n // Personal message headers\n string constant ETH_PERSONAL_MESSAGE = \"\\x19Ethereum Signed Message:\\n32\";\n string constant TREZOR_PERSONAL_MESSAGE = \"\\x19Ethereum Signed Message:\\n\\x41\";\n\n // Mapping of hash => signer => signed\n mapping (bytes32 => mapping (address => bool)) public preSigned;\n\n // Mapping of signer => validator => approved\n mapping (address => mapping (address => bool)) public allowedValidators;\n\n /// @dev Approves a hash on-chain using any valid signature type.\n /// After presigning a hash, the preSign signature type will become valid for that hash and signer.\n /// @param signer Address that should have signed the given hash.\n /// @param signature Proof that the hash has been signed by signer.\n function preSign(\n bytes32 hash,\n address signer,\n bytes signature\n )\n external\n {\n require(\n isValidSignature(hash, signer, signature),\n INVALID_SIGNATURE\n );\n preSigned[hash][signer] = true;\n }\n\n /// @dev Approves/unnapproves a Validator contract to verify signatures on signer's behalf.\n /// @param validator Address of Validator contract.\n /// @param approval Approval or disapproval of Validator contract.\n function setSignatureValidatorApproval(\n address validator,\n bool approval\n )\n external\n {\n address signer = getCurrentContextAddress();\n allowedValidators[signer][validator] = approval;\n }\n\n /// @dev Verifies that a hash has been signed by the given signer.\n /// @param hash Any 32 byte hash.\n /// @param signer Address that should have signed the given hash.\n /// @param signature Proof that the hash has been signed by signer.\n /// @return True if the address recovered from the provided signature matches the input signer address.\n function isValidSignature(\n bytes32 hash,\n address signer,\n bytes memory signature\n )\n public\n view\n returns (bool isValid)\n {\n // TODO: Domain separation: make hash depend on role. (Taker sig should not be valid as maker sig, etc.)\n require(\n signature.length > 0,\n LENGTH_GREATER_THAN_0_REQUIRED\n );\n\n // Pop last byte off of signature byte array.\n SignatureType signatureType = SignatureType(uint8(popLastByte(signature)));\n\n // Variables are not scoped in Solidity.\n uint8 v;\n bytes32 r;\n bytes32 s;\n address recovered;\n\n // Always illegal signature.\n // This is always an implicit option since a signer can create a\n // signature array with invalid type or length. We may as well make\n // it an explicit option. This aids testing and analysis. It is\n // also the initialization value for the enum type.\n if (signatureType == SignatureType.Illegal) {\n revert(SIGNATURE_ILLEGAL);\n\n // Always invalid signature.\n // Like Illegal, this is always implicitly available and therefore\n // offered explicitly. It can be implicitly created by providing\n // a correctly formatted but incorrect signature.\n } else if (signatureType == SignatureType.Invalid) {\n require(\n signature.length == 0,\n LENGTH_0_REQUIRED\n );\n isValid = false;\n return isValid;\n\n // Signature using EIP712\n } else if (signatureType == SignatureType.EIP712) {\n require(\n signature.length == 65,\n LENGTH_65_REQUIRED\n );\n v = uint8(signature[0]);\n r = readBytes32(signature, 1);\n s = readBytes32(signature, 33);\n recovered = ecrecover(hash, v, r, s);\n isValid = signer == recovered;\n return isValid;\n\n // Signed using web3.eth_sign\n } else if (signatureType == SignatureType.EthSign) {\n require(\n signature.length == 65,\n LENGTH_65_REQUIRED\n );\n v = uint8(signature[0]);\n r = readBytes32(signature, 1);\n s = readBytes32(signature, 33);\n recovered = ecrecover(\n keccak256(abi.encodePacked(ETH_PERSONAL_MESSAGE, hash)),\n v,\n r,\n s\n );\n isValid = signer == recovered;\n return isValid;\n\n // Implicitly signed by caller.\n // The signer has initiated the call. In the case of non-contract\n // accounts it means the transaction itself was signed.\n // Example: let's say for a particular operation three signatures\n // A, B and C are required. To submit the transaction, A and B can\n // give a signature to C, who can then submit the transaction using\n // `Caller` for his own signature. Or A and C can sign and B can\n // submit using `Caller`. Having `Caller` allows this flexibility.\n } else if (signatureType == SignatureType.Caller) {\n require(\n signature.length == 0,\n LENGTH_0_REQUIRED\n );\n isValid = signer == msg.sender;\n return isValid;\n\n // Signature verified by wallet contract.\n // If used with an order, the maker of the order is the wallet contract.\n } else if (signatureType == SignatureType.Wallet) {\n isValid = IWallet(signer).isValidSignature(hash, signature);\n return isValid;\n\n // Signature verified by validator contract.\n // If used with an order, the maker of the order can still be an EOA.\n // A signature using this type should be encoded as:\n // | Offset | Length | Contents |\n // | 0x00 | x | Signature to validate |\n // | 0x00 + x | 20 | Address of validator contract |\n // | 0x14 + x | 1 | Signature type is always \"\\x06\" |\n } else if (signatureType == SignatureType.Validator) {\n // Pop last 20 bytes off of signature byte array.\n address validator = popLast20Bytes(signature);\n // Ensure signer has approved validator.\n if (!allowedValidators[signer][validator]) {\n return false;\n }\n isValid = IValidator(validator).isValidSignature(\n hash,\n signer,\n signature\n );\n return isValid;\n\n // Signer signed hash previously using the preSign function.\n } else if (signatureType == SignatureType.PreSigned) {\n isValid = preSigned[hash][signer];\n return isValid;\n\n // Signature from Trezor hardware wallet.\n // It differs from web3.eth_sign in the encoding of message length\n // (Bitcoin varint encoding vs ascii-decimal, the latter is not\n // self-terminating which leads to ambiguities).\n // See also:\n // https://en.bitcoin.it/wiki/Protocol_documentation#Variable_length_integer\n // https://github.com/trezor/trezor-mcu/blob/master/firmware/ethereum.c#L602\n // https://github.com/trezor/trezor-mcu/blob/master/firmware/crypto.c#L36\n } else if (signatureType == SignatureType.Trezor) {\n require(\n signature.length == 65,\n LENGTH_65_REQUIRED\n );\n v = uint8(signature[0]);\n r = readBytes32(signature, 1);\n s = readBytes32(signature, 33);\n recovered = ecrecover(\n keccak256(abi.encodePacked(TREZOR_PERSONAL_MESSAGE, hash)),\n v,\n r,\n s\n );\n isValid = signer == recovered;\n return isValid;\n\n // Signer signed hash previously using the preSign function\n } else if (signatureType == SignatureType.PreSigned) {\n isValid = preSigned[hash][signer];\n return isValid;\n }\n\n // Anything else is illegal (We do not return false because\n // the signature may actually be valid, just not in a format\n // that we currently support. In this case returning false\n // may lead the caller to incorrectly believe that the\n // signature was invalid.)\n revert(SIGNATURE_UNSUPPORTED);\n }\n}\n", - "current/protocol/Exchange/MixinTransactions.sol": "/*\n\n Copyright 2018 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\npragma solidity ^0.4.24;\n\nimport \"./libs/LibExchangeErrors.sol\";\nimport \"./mixins/MSignatureValidator.sol\";\nimport \"./mixins/MTransactions.sol\";\n\ncontract MixinTransactions is\n LibExchangeErrors,\n MSignatureValidator,\n MTransactions\n{\n\n // Mapping of transaction hash => executed\n // This prevents transactions from being executed more than once.\n mapping (bytes32 => bool) public transactions;\n\n // Address of current transaction signer\n address public currentContextAddress;\n\n /// @dev Executes an exchange method call in the context of signer.\n /// @param salt Arbitrary number to ensure uniqueness of transaction hash.\n /// @param signer Address of transaction signer.\n /// @param data AbiV2 encoded calldata.\n /// @param signature Proof of signer transaction by signer.\n function executeTransaction(\n uint256 salt,\n address signer,\n bytes data,\n bytes signature\n )\n external\n {\n // Prevent reentrancy\n require(\n currentContextAddress == address(0),\n REENTRANCY_ILLEGAL\n );\n\n // Calculate transaction hash\n bytes32 transactionHash = keccak256(abi.encodePacked(\n address(this),\n signer,\n salt,\n data\n ));\n\n // Validate transaction has not been executed\n require(\n !transactions[transactionHash],\n INVALID_TX_HASH\n );\n\n // Transaction always valid if signer is sender of transaction\n if (signer != msg.sender) {\n // Validate signature\n require(\n isValidSignature(transactionHash, signer, signature),\n INVALID_TX_SIGNATURE\n );\n\n // Set the current transaction signer\n currentContextAddress = signer;\n }\n\n // Execute transaction\n transactions[transactionHash] = true;\n require(\n address(this).delegatecall(data),\n FAILED_EXECUTION\n );\n\n // Reset current transaction signer\n // TODO: Check if gas is paid when currentContextAddress is already 0.\n currentContextAddress = address(0);\n }\n\n /// @dev The current function will be called in the context of this address (either 0x transaction signer or `msg.sender`).\n /// If calling a fill function, this address will represent the taker.\n /// If calling a cancel function, this address will represent the maker.\n /// @return Signer of 0x transaction if entry point is `executeTransaction`.\n /// `msg.sender` if entry point is any other function.\n function getCurrentContextAddress()\n internal\n view\n returns (address)\n {\n address contextAddress = currentContextAddress == address(0) ? msg.sender : currentContextAddress;\n return contextAddress;\n }\n}\n", + "current/protocol/Exchange/MixinSignatureValidator.sol": "/*\n\n Copyright 2018 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.4.24;\n\nimport \"../../utils/LibBytes/LibBytes.sol\";\nimport \"./libs/LibExchangeErrors.sol\";\nimport \"./mixins/MSignatureValidator.sol\";\nimport \"./mixins/MTransactions.sol\";\nimport \"./interfaces/IWallet.sol\";\nimport \"./interfaces/IValidator.sol\";\n\ncontract MixinSignatureValidator is\n LibBytes,\n LibExchangeErrors,\n MSignatureValidator,\n MTransactions\n{\n // Personal message headers\n string constant ETH_PERSONAL_MESSAGE = \"\\x19Ethereum Signed Message:\\n32\";\n string constant TREZOR_PERSONAL_MESSAGE = \"\\x19Ethereum Signed Message:\\n\\x20\";\n\n // Mapping of hash => signer => signed\n mapping (bytes32 => mapping (address => bool)) public preSigned;\n\n // Mapping of signer => validator => approved\n mapping (address => mapping (address => bool)) public allowedValidators;\n\n /// @dev Approves a hash on-chain using any valid signature type.\n /// After presigning a hash, the preSign signature type will become valid for that hash and signer.\n /// @param signer Address that should have signed the given hash.\n /// @param signature Proof that the hash has been signed by signer.\n function preSign(\n bytes32 hash,\n address signer,\n bytes signature\n )\n external\n {\n require(\n isValidSignature(hash, signer, signature),\n INVALID_SIGNATURE\n );\n preSigned[hash][signer] = true;\n }\n\n /// @dev Approves/unnapproves a Validator contract to verify signatures on signer's behalf.\n /// @param validator Address of Validator contract.\n /// @param approval Approval or disapproval of Validator contract.\n function setSignatureValidatorApproval(\n address validator,\n bool approval\n )\n external\n {\n address signer = getCurrentContextAddress();\n allowedValidators[signer][validator] = approval;\n }\n\n /// @dev Verifies that a hash has been signed by the given signer.\n /// @param hash Any 32 byte hash.\n /// @param signer Address that should have signed the given hash.\n /// @param signature Proof that the hash has been signed by signer.\n /// @return True if the address recovered from the provided signature matches the input signer address.\n function isValidSignature(\n bytes32 hash,\n address signer,\n bytes memory signature\n )\n public\n view\n returns (bool isValid)\n {\n // TODO: Domain separation: make hash depend on role. (Taker sig should not be valid as maker sig, etc.)\n require(\n signature.length > 0,\n LENGTH_GREATER_THAN_0_REQUIRED\n );\n\n // Ensure signature is supported\n uint8 signatureTypeRaw = uint8(popLastByte(signature));\n require(\n signatureTypeRaw < uint8(SignatureType.NSignatureTypes),\n SIGNATURE_UNSUPPORTED\n );\n\n // Pop last byte off of signature byte array.\n SignatureType signatureType = SignatureType(signatureTypeRaw);\n\n // Variables are not scoped in Solidity.\n uint8 v;\n bytes32 r;\n bytes32 s;\n address recovered;\n\n // Always illegal signature.\n // This is always an implicit option since a signer can create a\n // signature array with invalid type or length. We may as well make\n // it an explicit option. This aids testing and analysis. It is\n // also the initialization value for the enum type.\n if (signatureType == SignatureType.Illegal) {\n revert(SIGNATURE_ILLEGAL);\n\n // Always invalid signature.\n // Like Illegal, this is always implicitly available and therefore\n // offered explicitly. It can be implicitly created by providing\n // a correctly formatted but incorrect signature.\n } else if (signatureType == SignatureType.Invalid) {\n require(\n signature.length == 0,\n LENGTH_0_REQUIRED\n );\n isValid = false;\n return isValid;\n\n // Signature using EIP712\n } else if (signatureType == SignatureType.EIP712) {\n require(\n signature.length == 65,\n LENGTH_65_REQUIRED\n );\n v = uint8(signature[0]);\n r = readBytes32(signature, 1);\n s = readBytes32(signature, 33);\n recovered = ecrecover(hash, v, r, s);\n isValid = signer == recovered;\n return isValid;\n\n // Signed using web3.eth_sign\n } else if (signatureType == SignatureType.EthSign) {\n require(\n signature.length == 65,\n LENGTH_65_REQUIRED\n );\n v = uint8(signature[0]);\n r = readBytes32(signature, 1);\n s = readBytes32(signature, 33);\n recovered = ecrecover(\n keccak256(abi.encodePacked(ETH_PERSONAL_MESSAGE, hash)),\n v,\n r,\n s\n );\n isValid = signer == recovered;\n return isValid;\n\n // Implicitly signed by caller.\n // The signer has initiated the call. In the case of non-contract\n // accounts it means the transaction itself was signed.\n // Example: let's say for a particular operation three signatures\n // A, B and C are required. To submit the transaction, A and B can\n // give a signature to C, who can then submit the transaction using\n // `Caller` for his own signature. Or A and C can sign and B can\n // submit using `Caller`. Having `Caller` allows this flexibility.\n } else if (signatureType == SignatureType.Caller) {\n require(\n signature.length == 0,\n LENGTH_0_REQUIRED\n );\n isValid = signer == msg.sender;\n return isValid;\n\n // Signature verified by wallet contract.\n // If used with an order, the maker of the order is the wallet contract.\n } else if (signatureType == SignatureType.Wallet) {\n isValid = IWallet(signer).isValidSignature(hash, signature);\n return isValid;\n\n // Signature verified by validator contract.\n // If used with an order, the maker of the order can still be an EOA.\n // A signature using this type should be encoded as:\n // | Offset | Length | Contents |\n // | 0x00 | x | Signature to validate |\n // | 0x00 + x | 20 | Address of validator contract |\n // | 0x14 + x | 1 | Signature type is always \"\\x06\" |\n } else if (signatureType == SignatureType.Validator) {\n // Pop last 20 bytes off of signature byte array.\n address validator = popLast20Bytes(signature);\n // Ensure signer has approved validator.\n if (!allowedValidators[signer][validator]) {\n return false;\n }\n isValid = IValidator(validator).isValidSignature(\n hash,\n signer,\n signature\n );\n return isValid;\n\n // Signer signed hash previously using the preSign function.\n } else if (signatureType == SignatureType.PreSigned) {\n isValid = preSigned[hash][signer];\n return isValid;\n\n // Signature from Trezor hardware wallet.\n // It differs from web3.eth_sign in the encoding of message length\n // (Bitcoin varint encoding vs ascii-decimal, the latter is not\n // self-terminating which leads to ambiguities).\n // See also:\n // https://en.bitcoin.it/wiki/Protocol_documentation#Variable_length_integer\n // https://github.com/trezor/trezor-mcu/blob/master/firmware/ethereum.c#L602\n // https://github.com/trezor/trezor-mcu/blob/master/firmware/crypto.c#L36\n } else if (signatureType == SignatureType.Trezor) {\n require(\n signature.length == 65,\n LENGTH_65_REQUIRED\n );\n v = uint8(signature[0]);\n r = readBytes32(signature, 1);\n s = readBytes32(signature, 33);\n recovered = ecrecover(\n keccak256(abi.encodePacked(TREZOR_PERSONAL_MESSAGE, hash)),\n v,\n r,\n s\n );\n isValid = signer == recovered;\n return isValid;\n\n // Signer signed hash previously using the preSign function\n } else if (signatureType == SignatureType.PreSigned) {\n isValid = preSigned[hash][signer];\n return isValid;\n }\n\n // Anything else is illegal (We do not return false because\n // the signature may actually be valid, just not in a format\n // that we currently support. In this case returning false\n // may lead the caller to incorrectly believe that the\n // signature was invalid.)\n revert(SIGNATURE_UNSUPPORTED);\n }\n}\n", + "current/protocol/Exchange/MixinTransactions.sol": "/*\n\n Copyright 2018 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\npragma solidity ^0.4.24;\n\nimport \"./libs/LibExchangeErrors.sol\";\nimport \"./mixins/MSignatureValidator.sol\";\nimport \"./mixins/MTransactions.sol\";\nimport \"./libs/LibExchangeErrors.sol\";\nimport \"./libs/LibEIP712.sol\";\n\ncontract MixinTransactions is\n LibEIP712,\n LibExchangeErrors,\n MSignatureValidator,\n MTransactions\n{\n\n // Mapping of transaction hash => executed\n // This prevents transactions from being executed more than once.\n mapping (bytes32 => bool) public transactions;\n\n // Address of current transaction signer\n address public currentContextAddress;\n\n // Hash for the EIP712 ZeroEx Transaction Schema\n bytes32 constant EIP712_ZEROEX_TRANSACTION_SCHEMA_HASH = keccak256(abi.encodePacked(\n \"ZeroExTransaction(\",\n \"uint256 salt,\",\n \"address signer,\",\n \"bytes data\",\n \")\"\n ));\n\n /// @dev Calculates EIP712 hash of the Transaction.\n /// @param salt Arbitrary number to ensure uniqueness of transaction hash.\n /// @param signer Address of transaction signer.\n /// @param data AbiV2 encoded calldata.\n /// @return EIP712 hash of the Transaction.\n function hashZeroExTransaction(uint256 salt, address signer, bytes data)\n internal\n pure\n returns (bytes32)\n {\n return keccak256(abi.encode(\n EIP712_ZEROEX_TRANSACTION_SCHEMA_HASH,\n salt,\n signer,\n keccak256(data)\n ));\n }\n\n /// @dev Executes an exchange method call in the context of signer.\n /// @param salt Arbitrary number to ensure uniqueness of transaction hash.\n /// @param signer Address of transaction signer.\n /// @param data AbiV2 encoded calldata.\n /// @param signature Proof of signer transaction by signer.\n function executeTransaction(\n uint256 salt,\n address signer,\n bytes data,\n bytes signature\n )\n external\n {\n // Prevent reentrancy\n require(\n currentContextAddress == address(0),\n REENTRANCY_ILLEGAL\n );\n\n bytes32 transactionHash = hashEIP712Message(hashZeroExTransaction(salt, signer, data));\n\n // Validate transaction has not been executed\n require(\n !transactions[transactionHash],\n INVALID_TX_HASH\n );\n\n // Transaction always valid if signer is sender of transaction\n if (signer != msg.sender) {\n // Validate signature\n require(\n isValidSignature(transactionHash, signer, signature),\n INVALID_TX_SIGNATURE\n );\n\n // Set the current transaction signer\n currentContextAddress = signer;\n }\n\n // Execute transaction\n transactions[transactionHash] = true;\n require(\n address(this).delegatecall(data),\n FAILED_EXECUTION\n );\n\n // Reset current transaction signer\n // TODO: Check if gas is paid when currentContextAddress is already 0.\n currentContextAddress = address(0);\n }\n\n /// @dev The current function will be called in the context of this address (either 0x transaction signer or `msg.sender`).\n /// If calling a fill function, this address will represent the taker.\n /// If calling a cancel function, this address will represent the maker.\n /// @return Signer of 0x transaction if entry point is `executeTransaction`.\n /// `msg.sender` if entry point is any other function.\n function getCurrentContextAddress()\n internal\n view\n returns (address)\n {\n address contextAddress = currentContextAddress == address(0) ? msg.sender : currentContextAddress;\n return contextAddress;\n }\n}\n", "current/protocol/Exchange/interfaces/ISignatureValidator.sol": "/*\n\n Copyright 2018 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.4.24;\n\ncontract ISignatureValidator {\n\n /// @dev Approves a hash on-chain using any valid signature type.\n /// After presigning a hash, the preSign signature type will become valid for that hash and signer.\n /// @param signer Address that should have signed the given hash.\n /// @param signature Proof that the hash has been signed by signer.\n function preSign(\n bytes32 hash,\n address signer,\n bytes signature\n )\n external;\n \n /// @dev Approves/unnapproves a Validator contract to verify signatures on signer's behalf.\n /// @param validator Address of Validator contract.\n /// @param approval Approval or disapproval of Validator contract.\n function setSignatureValidatorApproval(\n address validator,\n bool approval\n )\n external;\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signer Address of signer.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n address signer,\n bytes memory signature\n )\n public\n view\n returns (bool isValid);\n}\n", "current/protocol/Exchange/interfaces/ITransactions.sol": "/*\n\n Copyright 2018 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\npragma solidity ^0.4.24;\n\ncontract ITransactions {\n\n /// @dev Executes an exchange method call in the context of signer.\n /// @param salt Arbitrary number to ensure uniqueness of transaction hash.\n /// @param signer Address of transaction signer.\n /// @param data AbiV2 encoded calldata.\n /// @param signature Proof of signer transaction by signer.\n function executeTransaction(\n uint256 salt,\n address signer,\n bytes data,\n bytes signature\n )\n external;\n}\n", "current/protocol/Exchange/interfaces/IValidator.sol": "/*\n\n Copyright 2018 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.4.23;\n\ncontract IValidator {\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signer Address that should have signed the given hash.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n address signer,\n bytes signature\n )\n external\n view\n returns (bool isValid);\n}\n", "current/protocol/Exchange/interfaces/IWallet.sol": "/*\n\n Copyright 2018 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.4.24;\n\ncontract IWallet {\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n bytes signature\n )\n external\n view\n returns (bool isValid);\n}\n", - "current/protocol/Exchange/libs/LibExchangeErrors.sol": "/*\n\n Copyright 2018 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.4.24;\n\ncontract LibExchangeErrors {\n /// Order validation errors ///\n string constant ORDER_UNFILLABLE = \"ORDER_UNFILLABLE\"; // Order cannot be filled.\n string constant INVALID_MAKER = \"INVALID_MAKER\"; // Invalid makerAddress.\n string constant INVALID_TAKER = \"INVALID_TAKER\"; // Invalid takerAddress.\n string constant INVALID_SENDER = \"INVALID_SENDER\"; // Invalid `msg.sender`.\n string constant INVALID_ORDER_SIGNATURE = \"INVALID_ORDER_SIGNATURE\"; // Signature validation failed. \n \n /// fillOrder validation errors ///\n string constant INVALID_TAKER_AMOUNT = \"INVALID_TAKER_AMOUNT\"; // takerAssetFillAmount cannot equal 0.\n string constant ROUNDING_ERROR = \"ROUNDING_ERROR\"; // Rounding error greater than 0.1% of takerAssetFillAmount. \n \n /// Signature validation errors ///\n string constant INVALID_SIGNATURE = \"INVALID_SIGNATURE\"; // Signature validation failed. \n string constant SIGNATURE_ILLEGAL = \"SIGNATURE_ILLEGAL\"; // Signature type is illegal.\n string constant SIGNATURE_UNSUPPORTED = \"SIGNATURE_UNSUPPORTED\"; // Signature type unsupported.\n \n /// cancelOrdersUptTo errors ///\n string constant INVALID_NEW_ORDER_EPOCH = \"INVALID_NEW_ORDER_EPOCH\"; // Specified salt must be greater than or equal to existing orderEpoch.\n\n /// fillOrKillOrder errors ///\n string constant COMPLETE_FILL_FAILED = \"COMPLETE_FILL_FAILED\"; // Desired takerAssetFillAmount could not be completely filled. \n\n /// matchOrders errors ///\n string constant NEGATIVE_SPREAD_REQUIRED = \"NEGATIVE_SPREAD_REQUIRED\"; // Matched orders must have a negative spread.\n\n /// Transaction errors ///\n string constant REENTRANCY_ILLEGAL = \"REENTRANCY_ILLEGAL\"; // Recursive reentrancy is not allowed. \n string constant INVALID_TX_HASH = \"INVALID_TX_HASH\"; // Transaction has already been executed. \n string constant INVALID_TX_SIGNATURE = \"INVALID_TX_SIGNATURE\"; // Signature validation failed. \n string constant FAILED_EXECUTION = \"FAILED_EXECUTION\"; // Transaction execution failed. \n \n /// registerAssetProxy errors ///\n string constant ASSET_PROXY_MISMATCH = \"ASSET_PROXY_MISMATCH\"; // oldAssetProxy proxy does not match currentAssetProxy. \n string constant ASSET_PROXY_ID_MISMATCH = \"ASSET_PROXY_ID_MISMATCH\"; // newAssetProxyId does not match given assetProxyId.\n\n /// Length validation errors ///\n string constant LENGTH_GREATER_THAN_0_REQUIRED = \"LENGTH_GREATER_THAN_0_REQUIRED\"; // Byte array must have a length greater than 0.\n string constant LENGTH_0_REQUIRED = \"LENGTH_1_REQUIRED\"; // Byte array must have a length of 1.\n string constant LENGTH_65_REQUIRED = \"LENGTH_66_REQUIRED\"; // Byte array must have a length of 66.\n}\n", - "current/protocol/Exchange/mixins/MSignatureValidator.sol": "/*\n\n Copyright 2018 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.4.24;\n\nimport \"../interfaces/ISignatureValidator.sol\";\n\ncontract MSignatureValidator is\n ISignatureValidator\n{\n // Allowed signature types.\n enum SignatureType {\n Illegal, // 0x00, default value\n Invalid, // 0x01\n EIP712, // 0x02\n EthSign, // 0x03\n Caller, // 0x04\n Wallet, // 0x05\n Validator, // 0x06\n PreSigned, // 0x07\n Trezor // 0x08\n }\n}\n", + "current/protocol/Exchange/libs/LibEIP712.sol": "/*\n\n Copyright 2018 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.4.24;\n\ncontract LibEIP712 {\n // EIP191 header for EIP712 prefix\n string constant EIP191_HEADER = \"\\x19\\x01\";\n\n // EIP712 Domain Name value\n string constant EIP712_DOMAIN_NAME = \"0x Protocol\";\n\n // EIP712 Domain Version value\n string constant EIP712_DOMAIN_VERSION = \"2\";\n\n // Hash of the EIP712 Domain Separator Schema\n bytes32 public constant EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH = keccak256(abi.encodePacked(\n \"EIP712Domain(\",\n \"string name,\",\n \"string version,\",\n \"address verifyingContract\",\n \")\"\n ));\n\n // Hash of the EIP712 Domain Separator data\n bytes32 public EIP712_DOMAIN_HASH;\n\n constructor ()\n public\n {\n EIP712_DOMAIN_HASH = keccak256(abi.encode(\n EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH,\n keccak256(bytes(EIP712_DOMAIN_NAME)),\n keccak256(bytes(EIP712_DOMAIN_VERSION)),\n address(this)\n ));\n }\n\n /// @dev Calculates EIP712 encoding for a hash struct in this EIP712 Domain.\n /// @param hashStruct The EIP712 hash struct.\n /// @return EIP712 hash applied to this EIP712 Domain.\n function hashEIP712Message(bytes32 hashStruct)\n internal\n view\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(EIP191_HEADER, EIP712_DOMAIN_HASH, hashStruct));\n }\n}\n", + "current/protocol/Exchange/libs/LibExchangeErrors.sol": "/*\n\n Copyright 2018 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.4.24;\n\ncontract LibExchangeErrors {\n /// Order validation errors ///\n string constant ORDER_UNFILLABLE = \"ORDER_UNFILLABLE\"; // Order cannot be filled.\n string constant INVALID_MAKER = \"INVALID_MAKER\"; // Invalid makerAddress.\n string constant INVALID_TAKER = \"INVALID_TAKER\"; // Invalid takerAddress.\n string constant INVALID_SENDER = \"INVALID_SENDER\"; // Invalid `msg.sender`.\n string constant INVALID_ORDER_SIGNATURE = \"INVALID_ORDER_SIGNATURE\"; // Signature validation failed. \n \n /// fillOrder validation errors ///\n string constant INVALID_TAKER_AMOUNT = \"INVALID_TAKER_AMOUNT\"; // takerAssetFillAmount cannot equal 0.\n string constant ROUNDING_ERROR = \"ROUNDING_ERROR\"; // Rounding error greater than 0.1% of takerAssetFillAmount. \n \n /// Signature validation errors ///\n string constant INVALID_SIGNATURE = \"INVALID_SIGNATURE\"; // Signature validation failed. \n string constant SIGNATURE_ILLEGAL = \"SIGNATURE_ILLEGAL\"; // Signature type is illegal.\n string constant SIGNATURE_UNSUPPORTED = \"SIGNATURE_UNSUPPORTED\"; // Signature type unsupported.\n \n /// cancelOrdersUptTo errors ///\n string constant INVALID_NEW_ORDER_EPOCH = \"INVALID_NEW_ORDER_EPOCH\"; // Specified salt must be greater than or equal to existing orderEpoch.\n\n /// fillOrKillOrder errors ///\n string constant COMPLETE_FILL_FAILED = \"COMPLETE_FILL_FAILED\"; // Desired takerAssetFillAmount could not be completely filled. \n\n /// matchOrders errors ///\n string constant NEGATIVE_SPREAD_REQUIRED = \"NEGATIVE_SPREAD_REQUIRED\"; // Matched orders must have a negative spread.\n\n /// Transaction errors ///\n string constant REENTRANCY_ILLEGAL = \"REENTRANCY_ILLEGAL\"; // Recursive reentrancy is not allowed. \n string constant INVALID_TX_HASH = \"INVALID_TX_HASH\"; // Transaction has already been executed. \n string constant INVALID_TX_SIGNATURE = \"INVALID_TX_SIGNATURE\"; // Signature validation failed. \n string constant FAILED_EXECUTION = \"FAILED_EXECUTION\"; // Transaction execution failed. \n \n /// registerAssetProxy errors ///\n string constant ASSET_PROXY_MISMATCH = \"ASSET_PROXY_MISMATCH\"; // oldAssetProxy proxy does not match currentAssetProxy. \n string constant ASSET_PROXY_ID_MISMATCH = \"ASSET_PROXY_ID_MISMATCH\"; // newAssetProxyId does not match given assetProxyId.\n\n /// Length validation errors ///\n string constant LENGTH_GREATER_THAN_0_REQUIRED = \"LENGTH_GREATER_THAN_0_REQUIRED\"; // Byte array must have a length greater than 0.\n string constant LENGTH_0_REQUIRED = \"LENGTH_0_REQUIRED\"; // Byte array must have a length of 0.\n string constant LENGTH_65_REQUIRED = \"LENGTH_65_REQUIRED\"; // Byte array must have a length of 65.\n}\n", + "current/protocol/Exchange/mixins/MSignatureValidator.sol": "/*\n\n Copyright 2018 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.4.24;\n\nimport \"../interfaces/ISignatureValidator.sol\";\n\ncontract MSignatureValidator is\n ISignatureValidator\n{\n // Allowed signature types.\n enum SignatureType {\n Illegal, // 0x00, default value\n Invalid, // 0x01\n EIP712, // 0x02\n EthSign, // 0x03\n Caller, // 0x04\n Wallet, // 0x05\n Validator, // 0x06\n PreSigned, // 0x07\n Trezor, // 0x08\n NSignatureTypes // 0x09, number of signature types. Always leave at end.\n }\n}\n", "current/protocol/Exchange/mixins/MTransactions.sol": "/*\n\n Copyright 2018 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\npragma solidity ^0.4.24;\n\nimport \"../interfaces/ITransactions.sol\";\n\ncontract MTransactions is\n ITransactions\n{\n\n /// @dev The current function will be called in the context of this address (either 0x transaction signer or `msg.sender`).\n /// If calling a fill function, this address will represent the taker.\n /// If calling a cancel function, this address will represent the maker.\n /// @return Signer of 0x transaction if entry point is `executeTransaction`.\n /// `msg.sender` if entry point is any other function.\n function getCurrentContextAddress()\n internal\n view\n returns (address);\n}\n", "current/test/TestSignatureValidator/TestSignatureValidator.sol": "/*\n\n Copyright 2018 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../protocol/Exchange/MixinSignatureValidator.sol\";\nimport \"../../protocol/Exchange/MixinTransactions.sol\";\n\ncontract TestSignatureValidator is\n MixinSignatureValidator,\n MixinTransactions\n{\n\n function publicIsValidSignature(\n bytes32 hash,\n address signer,\n bytes memory signature\n )\n public\n view\n returns (bool isValid)\n {\n isValid = isValidSignature(\n hash,\n signer,\n signature\n );\n return isValid;\n }\n}\n", "current/utils/LibBytes/LibBytes.sol": "/*\n\n Copyright 2018 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.4.24;\n\nimport \"../LibMem/LibMem.sol\";\n\ncontract LibBytes is\n LibMem\n{\n\n // Revert reasons\n string constant GREATER_THAN_ZERO_LENGTH_REQUIRED = \"GREATER_THAN_ZERO_LENGTH_REQUIRED\";\n string constant GREATER_OR_EQUAL_TO_4_LENGTH_REQUIRED = \"GREATER_OR_EQUAL_TO_4_LENGTH_REQUIRED\";\n string constant GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED = \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\";\n string constant GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED = \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\";\n string constant GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED = \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\";\n string constant GREATER_OR_EQUAL_TO_SOURCE_BYTES_LENGTH_REQUIRED = \"GREATER_OR_EQUAL_TO_SOURCE_BYTES_LENGTH_REQUIRED\";\n\n /// @dev Pops the last byte off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The byte that was popped off.\n function popLastByte(bytes memory b)\n internal\n pure\n returns (bytes1 result)\n {\n require(\n b.length > 0,\n GREATER_THAN_ZERO_LENGTH_REQUIRED\n );\n\n // Store last byte.\n result = b[b.length - 1];\n\n assembly {\n // Decrement length of byte array.\n let newLen := sub(mload(b), 1)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Pops the last 20 bytes off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The 20 byte address that was popped off.\n function popLast20Bytes(bytes memory b)\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= 20,\n GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\n );\n\n // Store last 20 bytes.\n result = readAddress(b, b.length - 20);\n\n assembly {\n // Subtract 20 from byte array length.\n let newLen := sub(mload(b), 20)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Reads an address from a position in a byte array.\n /// @param b Byte array containing an address.\n /// @param index Index in byte array of address.\n /// @return address from byte array.\n function readAddress(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= index + 20, // 20 is length of address\n GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Read address from array memory\n assembly {\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 20-byte mask to obtain address\n result := and(mload(add(b, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n return result;\n }\n\n /// @dev Writes an address into a specific position in a byte array.\n /// @param b Byte array to insert address into.\n /// @param index Index in byte array of address.\n /// @param input Address to put into byte array.\n function writeAddress(\n bytes memory b,\n uint256 index,\n address input\n )\n internal\n pure\n {\n require(\n b.length >= index + 20, // 20 is length of address\n GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Store address into array memory\n assembly {\n // The address occupies 20 bytes and mstore stores 32 bytes.\n // First fetch the 32-byte word where we'll be storing the address, then\n // apply a mask so we have only the bytes in the word that the address will not occupy.\n // Then combine these bytes with the address and store the 32 bytes back to memory with mstore.\n\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 12-byte mask to obtain extra bytes occupying word of memory where we'll store the address\n let neighbors := and(mload(add(b, index)), 0xffffffffffffffffffffffff0000000000000000000000000000000000000000)\n\n // Store the neighbors and address into memory\n mstore(add(b, index), xor(input, neighbors))\n }\n }\n\n /// @dev Reads a bytes32 value from a position in a byte array.\n /// @param b Byte array containing a bytes32 value.\n /// @param index Index in byte array of bytes32 value.\n /// @return bytes32 value from byte array.\n function readBytes32(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes32 result)\n {\n require(\n b.length >= index + 32,\n GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n result := mload(add(b, index))\n }\n return result;\n }\n\n /// @dev Writes a bytes32 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes32 to put into byte array.\n function writeBytes32(\n bytes memory b,\n uint256 index,\n bytes32 input\n )\n internal\n pure\n {\n require(\n b.length >= index + 32,\n GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n mstore(add(b, index), input)\n }\n }\n\n /// @dev Reads a uint256 value from a position in a byte array.\n /// @param b Byte array containing a uint256 value.\n /// @param index Index in byte array of uint256 value.\n /// @return uint256 value from byte array.\n function readUint256(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (uint256 result)\n {\n return uint256(readBytes32(b, index));\n }\n\n /// @dev Writes a uint256 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input uint256 to put into byte array.\n function writeUint256(\n bytes memory b,\n uint256 index,\n uint256 input\n )\n internal\n pure\n {\n writeBytes32(b, index, bytes32(input));\n }\n\n /// @dev Reads the first 4 bytes from a byte array of arbitrary length.\n /// @param b Byte array to read first 4 bytes from.\n /// @return First 4 bytes of data.\n function readFirst4(bytes memory b)\n internal\n pure\n returns (bytes4 result)\n {\n require(\n b.length >= 4,\n GREATER_OR_EQUAL_TO_4_LENGTH_REQUIRED\n );\n assembly {\n result := mload(add(b, 32))\n }\n return result;\n }\n\n /// @dev Reads nested bytes from a specific position.\n /// @param b Byte array containing nested bytes.\n /// @param index Index of nested bytes.\n /// @return result Nested bytes.\n function readBytes(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes memory result)\n {\n // Read length of nested bytes\n uint256 nestedBytesLength = readUint256(b, index);\n index += 32;\n\n // Assert length of <b> is valid, given\n // length of nested bytes\n require(\n b.length >= index + nestedBytesLength,\n GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\n );\n\n // Allocate memory and copy value to result\n result = new bytes(nestedBytesLength);\n memCopy(\n getMemAddress(result) + 32, // +32 skips array length\n getMemAddress(b) + index + 32,\n nestedBytesLength\n );\n\n return result;\n }\n\n /// @dev Inserts bytes at a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes to insert.\n function writeBytes(\n bytes memory b,\n uint256 index,\n bytes memory input\n )\n internal\n pure\n {\n // Assert length of <b> is valid, given\n // length of input\n require(\n b.length >= index + 32 /* 32 bytes to store length */ + input.length,\n GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\n );\n\n // Copy <input> into <b>\n memCopy(\n getMemAddress(b) + 32 + index, // +32 to skip length of <b>\n getMemAddress(input), // includes length of <input>\n input.length + 32 // +32 bytes to store <input> length\n );\n }\n\n /// @dev Tests equality of two byte arrays.\n /// @param lhs First byte array to compare.\n /// @param rhs Second byte array to compare.\n /// @return True if arrays are the same. False otherwise.\n function areBytesEqual(\n bytes memory lhs,\n bytes memory rhs\n )\n internal\n pure\n returns (bool equal)\n {\n assembly {\n // Get the number of words occupied by <lhs>\n let lenFullWords := div(add(mload(lhs), 0x1F), 0x20)\n\n // Add 1 to the number of words, to account for the length field\n lenFullWords := add(lenFullWords, 0x1)\n\n // Test equality word-by-word.\n // Terminates early if there is a mismatch.\n for {let i := 0} lt(i, lenFullWords) {i := add(i, 1)} {\n let lhsWord := mload(add(lhs, mul(i, 0x20)))\n let rhsWord := mload(add(rhs, mul(i, 0x20)))\n equal := eq(lhsWord, rhsWord)\n if eq(equal, 0) {\n // Break\n i := lenFullWords\n }\n }\n }\n\n return equal;\n }\n\n /// @dev Performs a deep copy of a byte array onto another byte array of greater than or equal length.\n /// @param dest Byte array that will be overwritten with source bytes.\n /// @param source Byte array to copy onto dest bytes.\n function deepCopyBytes(\n bytes memory dest,\n bytes memory source\n )\n internal\n pure\n {\n uint256 sourceLen = source.length;\n // Dest length must be >= source length, or some bytes would not be copied.\n require(\n dest.length >= sourceLen,\n GREATER_OR_EQUAL_TO_SOURCE_BYTES_LENGTH_REQUIRED\n );\n memCopy(\n getMemAddress(dest) + 32, // +32 to skip length of <dest>\n getMemAddress(source) + 32, // +32 to skip length of <source>\n sourceLen\n );\n }\n}\n", "current/utils/LibMem/LibMem.sol": "/*\n\n Copyright 2018 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.4.24;\n\ncontract LibMem\n{\n\n /// @dev Gets the memory address for a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of byte array.\n function getMemAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := input\n }\n return memoryAddress;\n }\n\n /// @dev Copies `length` bytes from memory location `source` to `dest`.\n /// @param dest memory address to copy bytes to.\n /// @param source memory address to copy bytes from.\n /// @param length number of bytes to copy.\n function memCopy(\n uint256 dest,\n uint256 source,\n uint256 length\n )\n internal\n pure\n {\n if (length < 32) {\n // Handle a partial word by reading destination and masking\n // off the bits we are interested in.\n // This correctly handles overlap, zero lengths and source == dest\n assembly {\n let mask := sub(exp(256, sub(32, length)), 1)\n let s := and(mload(source), not(mask))\n let d := and(mload(dest), mask)\n mstore(dest, or(s, d))\n }\n } else {\n // Skip the O(length) loop when source == dest.\n if (source == dest) {\n return;\n }\n\n // For large copies we copy whole words at a time. The final\n // word is aligned to the end of the range (instead of after the\n // previous) to handle partial words. So a copy will look like this:\n //\n // ####\n // ####\n // ####\n // ####\n //\n // We handle overlap in the source and destination range by\n // changing the copying direction. This prevents us from\n // overwriting parts of source that we still need to copy.\n //\n // This correctly handles source == dest\n //\n if (source > dest) {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because it\n // is easier to compare with in the loop, and these\n // are also the addresses we need for copying the\n // last bytes.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the last 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the last bytes in\n // source already due to overlap.\n let last := mload(sEnd)\n\n // Copy whole words front to back\n // Note: the first check is always true,\n // this could have been a do-while loop.\n for {} lt(source, sEnd) {} {\n mstore(dest, mload(source))\n source := add(source, 32)\n dest := add(dest, 32)\n }\n \n // Write the last 32 bytes\n mstore(dEnd, last)\n }\n } else {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because those\n // are the starting points when copying a word at the end.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the first 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the first bytes in\n // source already due to overlap.\n let first := mload(source)\n\n // Copy whole words back to front\n // We use a signed comparisson here to allow dEnd to become\n // negative (happens when source and dest < 32). Valid\n // addresses in local memory will never be larger than\n // 2**255, so they can be safely re-interpreted as signed.\n // Note: the first check is always true,\n // this could have been a do-while loop.\n for {} slt(dest, dEnd) {} {\n mstore(dEnd, mload(sEnd))\n sEnd := sub(sEnd, 32)\n dEnd := sub(dEnd, 32)\n }\n \n // Write the first 32 bytes\n mstore(dest, first)\n }\n }\n }\n }\n}\n" }, - "sourceTreeHashHex": "0x2279ae28892d84c34b1c53418091a11d3b820dfb03695e0d1d55749b99c0abee", + "sourceTreeHashHex": "0x982cc346c38e4e4f0fc804fe52b8e08b754c515bba844313897d65f9d760caea", "compiler": { "name": "solc", "version": "soljson-v0.4.24+commit.e67f0147.js", |