From d5c389b7dc19ce392a97ad61cc2c03693be74873 Mon Sep 17 00:00:00 2001 From: Amir Bandeali Date: Tue, 26 Jun 2018 17:36:44 -0700 Subject: Update artifacts --- .../migrations/artifacts/2.0.0/TestLibBytes.json | 148 ++++++++++++++------- 1 file changed, 101 insertions(+), 47 deletions(-) (limited to 'packages/migrations/artifacts/2.0.0/TestLibBytes.json') diff --git a/packages/migrations/artifacts/2.0.0/TestLibBytes.json b/packages/migrations/artifacts/2.0.0/TestLibBytes.json index 8afc98574..a79f13ffa 100644 --- a/packages/migrations/artifacts/2.0.0/TestLibBytes.json +++ b/packages/migrations/artifacts/2.0.0/TestLibBytes.json @@ -30,19 +30,19 @@ "constant": true, "inputs": [ { - "name": "lhs", + "name": "b", "type": "bytes" }, { - "name": "rhs", - "type": "bytes" + "name": "index", + "type": "uint256" } ], - "name": "publicAreBytesEqual", + "name": "publicReadBytesWithLength", "outputs": [ { - "name": "equal", - "type": "bool" + "name": "result", + "type": "bytes" } ], "payable": false, @@ -82,12 +82,16 @@ { "name": "index", "type": "uint256" + }, + { + "name": "input", + "type": "address" } ], - "name": "publicReadBytes", + "name": "publicWriteAddress", "outputs": [ { - "name": "result", + "name": "", "type": "bytes" } ], @@ -108,10 +112,10 @@ }, { "name": "input", - "type": "address" + "type": "bytes" } ], - "name": "publicWriteAddress", + "name": "publicWriteBytesWithLength", "outputs": [ { "name": "", @@ -126,38 +130,23 @@ "constant": true, "inputs": [ { - "name": "b", + "name": "mem", "type": "bytes" - } - ], - "name": "publicReadFirst4", - "outputs": [ - { - "name": "result", - "type": "bytes4" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [ + }, { - "name": "b", - "type": "bytes" + "name": "dest", + "type": "uint256" }, { - "name": "index", + "name": "source", "type": "uint256" }, { - "name": "input", - "type": "bytes" + "name": "length", + "type": "uint256" } ], - "name": "publicWriteBytes", + "name": "testMemcpy", "outputs": [ { "name": "", @@ -241,6 +230,29 @@ "stateMutability": "pure", "type": "function" }, + { + "constant": true, + "inputs": [ + { + "name": "lhs", + "type": "bytes" + }, + { + "name": "rhs", + "type": "bytes" + } + ], + "name": "publicEqualsPop1", + "outputs": [ + { + "name": "equal", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, { "constant": true, "inputs": [ @@ -291,6 +303,29 @@ "stateMutability": "pure", "type": "function" }, + { + "constant": true, + "inputs": [ + { + "name": "b", + "type": "bytes" + }, + { + "name": "index", + "type": "uint256" + } + ], + "name": "publicReadBytes4", + "outputs": [ + { + "name": "result", + "type": "bytes4" + } + ], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, { "constant": true, "inputs": [ @@ -313,20 +348,43 @@ "payable": false, "stateMutability": "pure", "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "lhs", + "type": "bytes" + }, + { + "name": "rhs", + "type": "bytes" + } + ], + "name": "publicEquals", + "outputs": [ + { + "name": "equal", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "pure", + "type": "function" } ], "evm": { "bytecode": { "linkReferences": {}, - "object": "0x608060405234801561001057600080fd5b50610fe7806100206000396000f3006080604052600436106100c45763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630301d5e181146100c95780630945c63b1461010057806318c535d91461012d57806335997eaf1461015a5780633f2a25ec1461017a578063595fe5471461019a5780637d0d772f146101c757806382e2fa24146101e757806384f8775814610214578063a4b1965414610234578063b79650a414610262578063be766f1b14610282578063e3a85ce4146102af575b600080fd5b3480156100d557600080fd5b506100e96100e4366004610b7e565b6102cf565b6040516100f7929190610e6c565b60405180910390f35b34801561010c57600080fd5b5061012061011b366004610bbb565b6102e3565b6040516100f79190610e11565b34801561013957600080fd5b5061014d610148366004610bbb565b6102f8565b6040516100f79190610e3b565b34801561016657600080fd5b5061014d610175366004610c24565b61030b565b34801561018657600080fd5b5061014d610195366004610c6b565b610317565b3480156101a657600080fd5b506101ba6101b5366004610b7e565b61032e565b6040516100f79190610e2d565b3480156101d357600080fd5b5061014d6101e2366004610d29565b610339565b3480156101f357600080fd5b50610207610202366004610c24565b610346565b6040516100f79190610e03565b34801561022057600080fd5b5061014d61022f366004610ccf565b610352565b34801561024057600080fd5b5061025461024f366004610b7e565b61035f565b6040516100f7929190610e4c565b34801561026e57600080fd5b5061014d61027d366004610ccf565b61036c565b34801561028e57600080fd5b506102a261029d366004610c24565b610379565b6040516100f79190610e1f565b3480156102bb57600080fd5b506102a26102ca366004610c24565b610385565b606060006102dc83610391565b9293915050565b60006102ef838361046b565b90505b92915050565b606061030483836104b2565b5090919050565b60606102ef838361055d565b6060610324848484610656565b50825b9392505050565b60006102f2826106f3565b6060610324848484610784565b60006102ef8383610834565b60606103248484846108cc565b606060006102dc8361094b565b60606103248484846109dd565b60006102ef83836109e8565b60006102ef8383610379565b600080825111606060405190810160405280602181526020017f475245415445525f5448414e5f5a45524f5f4c454e4754485f5245515549524581526020017f44000000000000000000000000000000000000000000000000000000000000008152509015156104205760405160e560020a62461bcd0281526004016104179190610e3b565b60405180910390fd5b5081518290600019810190811061043357fe5b0160200151825160001901909252507f0100000000000000000000000000000000000000000000000000000000000000908190040290565b60006020601f8451010460018101905060005b818110156104aa576020810285810151908501518082149450846104a0578392505b505060010161047e565b505092915050565b8051825160408051606081018252603081527f475245415445525f4f525f455155414c5f544f5f534f555243455f425954455360208201527f5f4c454e4754485f52455155495245440000000000000000000000000000000091810191909152908211156105365760405160e560020a62461bcd0281526004016104179190610e3b565b5061055861054384610a6a565b60200161054f84610a6a565b60200183610a6d565b505050565b6060600061056b8484610379565b905060208301925080830184511015606060405190810160405280603081526020017f475245415445525f4f525f455155414c5f544f5f4e45535445445f425954455381526020017f5f4c454e4754485f5245515549524544000000000000000000000000000000008152509015156105fa5760405160e560020a62461bcd0281526004016104179190610e3b565b50806040519080825280601f01601f191660200182016040528015610629578160200160208202803883390190505b50915061064f61063883610a6a565b6020018461064587610a6a565b0160200183610a6d565b5092915050565b8160140183511015606060405190810160405280602681526020017f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f52458152602001600080516020610f8e8339815191528152509015156106cc5760405160e560020a62461bcd0281526004016104179190610e3b565b509101601401805173ffffffffffffffffffffffffffffffffffffffff1916919091189052565b6000600482511015606060405190810160405280602581526020017f475245415445525f4f525f455155414c5f544f5f345f4c454e4754485f52455181526020017f554952454400000000000000000000000000000000000000000000000000000081525090151561077b5760405160e560020a62461bcd0281526004016104179190610e3b565b50506020015190565b8051826020010183511015606060405190810160405280603081526020017f475245415445525f4f525f455155414c5f544f5f4e45535445445f425954455381526020017f5f4c454e4754485f52455155495245440000000000000000000000000000000081525090151561080f5760405160e560020a62461bcd0281526004016104179190610e3b565b506105588261081d85610a6a565b6020010161082a83610a6a565b8351602001610a6d565b60008160140183511015606060405190810160405280602681526020017f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f52458152602001600080516020610f8e8339815191528152509015156108ac5760405160e560020a62461bcd0281526004016104179190610e3b565b5050016014015173ffffffffffffffffffffffffffffffffffffffff1690565b8160200183511015606060405190810160405280602681526020017f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f52458152602001600080516020610f8e8339815191528152509015156109425760405160e560020a62461bcd0281526004016104179190610e3b565b50910160200152565b6000601482511015606060405190810160405280602681526020017f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f52458152602001600080516020610f8e8339815191528152509015156109c15760405160e560020a62461bcd0281526004016104179190610e3b565b506109d0826014845103610834565b8251601319019092525090565b6105588383836108cc565b60008160200183511015606060405190810160405280602681526020017f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f52458152602001600080516020610f8e833981519152815250901515610a605760405160e560020a62461bcd0281526004016104179190610e3b565b5050016020015190565b90565b6020811015610a97576001816020036101000a038019835116818551168082178652505050610558565b82821415610aa457610558565b82821115610ade5760208103905080820181840181515b82851015610ad6578451865260209586019590940193610abb565b905250610558565b60208103905080820181840183515b81861215610b095782518252601f199283019290910190610aed565b85525050505050565b60006103278235610edf565b60006103278235610a6a565b6000601f82018313610b3b57600080fd5b8135610b4e610b4982610eb3565b610e8c565b91508082526020830160208301858383011115610b6a57600080fd5b610b75838284610f47565b50505092915050565b600060208284031215610b9057600080fd5b813567ffffffffffffffff811115610ba757600080fd5b610bb384828501610b2a565b949350505050565b60008060408385031215610bce57600080fd5b823567ffffffffffffffff811115610be557600080fd5b610bf185828601610b2a565b925050602083013567ffffffffffffffff811115610c0e57600080fd5b610c1a85828601610b2a565b9150509250929050565b60008060408385031215610c3757600080fd5b823567ffffffffffffffff811115610c4e57600080fd5b610c5a85828601610b2a565b9250506020610c1a85828601610b1e565b600080600060608486031215610c8057600080fd5b833567ffffffffffffffff811115610c9757600080fd5b610ca386828701610b2a565b9350506020610cb486828701610b1e565b9250506040610cc586828701610b12565b9150509250925092565b600080600060608486031215610ce457600080fd5b833567ffffffffffffffff811115610cfb57600080fd5b610d0786828701610b2a565b9350506020610d1886828701610b1e565b9250506040610cc586828701610b1e565b600080600060608486031215610d3e57600080fd5b833567ffffffffffffffff811115610d5557600080fd5b610d6186828701610b2a565b9350506020610d7286828701610b1e565b925050604084013567ffffffffffffffff811115610d8f57600080fd5b610cc586828701610b2a565b610da481610edf565b82525050565b610da481610ef8565b610da481610efd565b610da481610a6a565b610da481610f22565b6000610dd982610edb565b808452610ded816020860160208601610f53565b610df681610f83565b9093016020019392505050565b602081016102f28284610d9b565b602081016102f28284610daa565b602081016102f28284610dbc565b602081016102f28284610dc5565b602080825281016103278184610dce565b60408082528101610e5d8185610dce565b90506103276020830184610d9b565b60408082528101610e7d8185610dce565b90506103276020830184610db3565b60405181810167ffffffffffffffff81118282101715610eab57600080fd5b604052919050565b600067ffffffffffffffff821115610eca57600080fd5b506020601f91909101601f19160190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b151590565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b82818337506000910152565b60005b83811015610f6e578181015183820152602001610f56565b83811115610f7d576000848401525b50505050565b601f01601f19169056005155495245440000000000000000000000000000000000000000000000000000a265627a7a72305820435da1502fb7860a4de6137b01b37f4c2cec6bfd388958ffdc0bf408f578bcb86c6578706572696d656e74616cf50037", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFE7 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC4 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x301D5E1 DUP2 EQ PUSH2 0xC9 JUMPI DUP1 PUSH4 0x945C63B EQ PUSH2 0x100 JUMPI DUP1 PUSH4 0x18C535D9 EQ PUSH2 0x12D JUMPI DUP1 PUSH4 0x35997EAF EQ PUSH2 0x15A JUMPI DUP1 PUSH4 0x3F2A25EC EQ PUSH2 0x17A JUMPI DUP1 PUSH4 0x595FE547 EQ PUSH2 0x19A JUMPI DUP1 PUSH4 0x7D0D772F EQ PUSH2 0x1C7 JUMPI DUP1 PUSH4 0x82E2FA24 EQ PUSH2 0x1E7 JUMPI DUP1 PUSH4 0x84F87758 EQ PUSH2 0x214 JUMPI DUP1 PUSH4 0xA4B19654 EQ PUSH2 0x234 JUMPI DUP1 PUSH4 0xB79650A4 EQ PUSH2 0x262 JUMPI DUP1 PUSH4 0xBE766F1B EQ PUSH2 0x282 JUMPI DUP1 PUSH4 0xE3A85CE4 EQ PUSH2 0x2AF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE9 PUSH2 0xE4 CALLDATASIZE PUSH1 0x4 PUSH2 0xB7E JUMP JUMPDEST PUSH2 0x2CF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF7 SWAP3 SWAP2 SWAP1 PUSH2 0xE6C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0x11B CALLDATASIZE PUSH1 0x4 PUSH2 0xBBB JUMP JUMPDEST PUSH2 0x2E3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF7 SWAP2 SWAP1 PUSH2 0xE11 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x139 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14D PUSH2 0x148 CALLDATASIZE PUSH1 0x4 PUSH2 0xBBB JUMP JUMPDEST PUSH2 0x2F8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF7 SWAP2 SWAP1 PUSH2 0xE3B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x166 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14D PUSH2 0x175 CALLDATASIZE PUSH1 0x4 PUSH2 0xC24 JUMP JUMPDEST PUSH2 0x30B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x186 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14D PUSH2 0x195 CALLDATASIZE PUSH1 0x4 PUSH2 0xC6B JUMP JUMPDEST PUSH2 0x317 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH2 0x1B5 CALLDATASIZE PUSH1 0x4 PUSH2 0xB7E JUMP JUMPDEST PUSH2 0x32E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF7 SWAP2 SWAP1 PUSH2 0xE2D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14D PUSH2 0x1E2 CALLDATASIZE PUSH1 0x4 PUSH2 0xD29 JUMP JUMPDEST PUSH2 0x339 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x207 PUSH2 0x202 CALLDATASIZE PUSH1 0x4 PUSH2 0xC24 JUMP JUMPDEST PUSH2 0x346 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF7 SWAP2 SWAP1 PUSH2 0xE03 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14D PUSH2 0x22F CALLDATASIZE PUSH1 0x4 PUSH2 0xCCF JUMP JUMPDEST PUSH2 0x352 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x240 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x254 PUSH2 0x24F CALLDATASIZE PUSH1 0x4 PUSH2 0xB7E JUMP JUMPDEST PUSH2 0x35F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF7 SWAP3 SWAP2 SWAP1 PUSH2 0xE4C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14D PUSH2 0x27D CALLDATASIZE PUSH1 0x4 PUSH2 0xCCF JUMP JUMPDEST PUSH2 0x36C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x28E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A2 PUSH2 0x29D CALLDATASIZE PUSH1 0x4 PUSH2 0xC24 JUMP JUMPDEST PUSH2 0x379 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF7 SWAP2 SWAP1 PUSH2 0xE1F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A2 PUSH2 0x2CA CALLDATASIZE PUSH1 0x4 PUSH2 0xC24 JUMP JUMPDEST PUSH2 0x385 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x2DC DUP4 PUSH2 0x391 JUMP JUMPDEST SWAP3 SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2EF DUP4 DUP4 PUSH2 0x46B JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x304 DUP4 DUP4 PUSH2 0x4B2 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x2EF DUP4 DUP4 PUSH2 0x55D JUMP JUMPDEST PUSH1 0x60 PUSH2 0x324 DUP5 DUP5 DUP5 PUSH2 0x656 JUMP JUMPDEST POP DUP3 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F2 DUP3 PUSH2 0x6F3 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x324 DUP5 DUP5 DUP5 PUSH2 0x784 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2EF DUP4 DUP4 PUSH2 0x834 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x324 DUP5 DUP5 DUP5 PUSH2 0x8CC JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x2DC DUP4 PUSH2 0x94B JUMP JUMPDEST PUSH1 0x60 PUSH2 0x324 DUP5 DUP5 DUP5 PUSH2 0x9DD JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2EF DUP4 DUP4 PUSH2 0x9E8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2EF DUP4 DUP4 PUSH2 0x379 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 0x420 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x417 SWAP2 SWAP1 PUSH2 0xE3B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP2 MLOAD DUP3 SWAP1 PUSH1 0x0 NOT DUP2 ADD SWAP1 DUP2 LT PUSH2 0x433 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD DUP3 MLOAD PUSH1 0x0 NOT ADD SWAP1 SWAP3 MSTORE POP PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 PUSH1 0x1F DUP5 MLOAD ADD DIV PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4AA JUMPI PUSH1 0x20 DUP2 MUL DUP6 DUP2 ADD MLOAD SWAP1 DUP6 ADD MLOAD DUP1 DUP3 EQ SWAP5 POP DUP5 PUSH2 0x4A0 JUMPI DUP4 SWAP3 POP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x47E JUMP JUMPDEST POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD DUP3 MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x30 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F534F555243455F4259544553 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5F4C454E4754485F524551554952454400000000000000000000000000000000 SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP3 GT ISZERO PUSH2 0x536 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x417 SWAP2 SWAP1 PUSH2 0xE3B JUMP JUMPDEST POP PUSH2 0x558 PUSH2 0x543 DUP5 PUSH2 0xA6A JUMP JUMPDEST PUSH1 0x20 ADD PUSH2 0x54F DUP5 PUSH2 0xA6A JUMP JUMPDEST PUSH1 0x20 ADD DUP4 PUSH2 0xA6D JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x56B DUP5 DUP5 PUSH2 0x379 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP4 ADD SWAP3 POP DUP1 DUP4 ADD DUP5 MLOAD LT ISZERO PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x475245415445525F4F525F455155414C5F544F5F4E45535445445F4259544553 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5F4C454E4754485F524551554952454400000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x5FA JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x417 SWAP2 SWAP1 PUSH2 0xE3B JUMP JUMPDEST POP DUP1 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x629 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH2 0x64F PUSH2 0x638 DUP4 PUSH2 0xA6A JUMP JUMPDEST PUSH1 0x20 ADD DUP5 PUSH2 0x645 DUP8 PUSH2 0xA6A JUMP JUMPDEST ADD PUSH1 0x20 ADD DUP4 PUSH2 0xA6D JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST 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 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xF8E DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x6CC JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x417 SWAP2 SWAP1 PUSH2 0xE3B JUMP JUMPDEST POP SWAP2 ADD PUSH1 0x14 ADD DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP2 SWAP1 SWAP2 XOR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4 DUP3 MLOAD LT ISZERO PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x475245415445525F4F525F455155414C5F544F5F345F4C454E4754485F524551 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5549524544000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x77B JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x417 SWAP2 SWAP1 PUSH2 0xE3B JUMP JUMPDEST POP POP PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 PUSH1 0x20 ADD ADD DUP4 MLOAD LT ISZERO PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x475245415445525F4F525F455155414C5F544F5F4E45535445445F4259544553 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5F4C454E4754485F524551554952454400000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x80F JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x417 SWAP2 SWAP1 PUSH2 0xE3B JUMP JUMPDEST POP PUSH2 0x558 DUP3 PUSH2 0x81D DUP6 PUSH2 0xA6A JUMP JUMPDEST PUSH1 0x20 ADD ADD PUSH2 0x82A DUP4 PUSH2 0xA6A JUMP JUMPDEST DUP4 MLOAD PUSH1 0x20 ADD PUSH2 0xA6D 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 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xF8E DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x8AC JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x417 SWAP2 SWAP1 PUSH2 0xE3B JUMP JUMPDEST POP POP ADD PUSH1 0x14 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST 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 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xF8E DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x942 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x417 SWAP2 SWAP1 PUSH2 0xE3B JUMP JUMPDEST POP SWAP2 ADD PUSH1 0x20 ADD MSTORE 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 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xF8E DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x9C1 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x417 SWAP2 SWAP1 PUSH2 0xE3B JUMP JUMPDEST POP PUSH2 0x9D0 DUP3 PUSH1 0x14 DUP5 MLOAD SUB PUSH2 0x834 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x13 NOT ADD SWAP1 SWAP3 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x558 DUP4 DUP4 DUP4 PUSH2 0x8CC 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 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xF8E DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0xA60 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x417 SWAP2 SWAP1 PUSH2 0xE3B JUMP JUMPDEST POP POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA97 JUMPI PUSH1 0x1 DUP2 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP4 MLOAD AND DUP2 DUP6 MLOAD AND DUP1 DUP3 OR DUP7 MSTORE POP POP POP PUSH2 0x558 JUMP JUMPDEST DUP3 DUP3 EQ ISZERO PUSH2 0xAA4 JUMPI PUSH2 0x558 JUMP JUMPDEST DUP3 DUP3 GT ISZERO PUSH2 0xADE JUMPI PUSH1 0x20 DUP2 SUB SWAP1 POP DUP1 DUP3 ADD DUP2 DUP5 ADD DUP2 MLOAD JUMPDEST DUP3 DUP6 LT ISZERO PUSH2 0xAD6 JUMPI DUP5 MLOAD DUP7 MSTORE PUSH1 0x20 SWAP6 DUP7 ADD SWAP6 SWAP1 SWAP5 ADD SWAP4 PUSH2 0xABB JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x558 JUMP JUMPDEST PUSH1 0x20 DUP2 SUB SWAP1 POP DUP1 DUP3 ADD DUP2 DUP5 ADD DUP4 MLOAD JUMPDEST DUP2 DUP7 SLT ISZERO PUSH2 0xB09 JUMPI DUP3 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xAED JUMP JUMPDEST DUP6 MSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x327 DUP3 CALLDATALOAD PUSH2 0xEDF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x327 DUP3 CALLDATALOAD PUSH2 0xA6A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0xB3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xB4E PUSH2 0xB49 DUP3 PUSH2 0xEB3 JUMP JUMPDEST PUSH2 0xE8C JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0xB6A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB75 DUP4 DUP3 DUP5 PUSH2 0xF47 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB90 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBB3 DUP5 DUP3 DUP6 ADD PUSH2 0xB2A JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xBCE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBE5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBF1 DUP6 DUP3 DUP7 ADD PUSH2 0xB2A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xC0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC1A DUP6 DUP3 DUP7 ADD PUSH2 0xB2A JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xC37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xC4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC5A DUP6 DUP3 DUP7 ADD PUSH2 0xB2A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0xC1A DUP6 DUP3 DUP7 ADD PUSH2 0xB1E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xC80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xC97 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xCA3 DUP7 DUP3 DUP8 ADD PUSH2 0xB2A JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xCB4 DUP7 DUP3 DUP8 ADD PUSH2 0xB1E JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0xCC5 DUP7 DUP3 DUP8 ADD PUSH2 0xB12 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xCE4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xCFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD07 DUP7 DUP3 DUP8 ADD PUSH2 0xB2A JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xD18 DUP7 DUP3 DUP8 ADD PUSH2 0xB1E JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0xCC5 DUP7 DUP3 DUP8 ADD PUSH2 0xB1E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xD3E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xD55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD61 DUP7 DUP3 DUP8 ADD PUSH2 0xB2A JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xD72 DUP7 DUP3 DUP8 ADD PUSH2 0xB1E JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xD8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xCC5 DUP7 DUP3 DUP8 ADD PUSH2 0xB2A JUMP JUMPDEST PUSH2 0xDA4 DUP2 PUSH2 0xEDF JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0xDA4 DUP2 PUSH2 0xEF8 JUMP JUMPDEST PUSH2 0xDA4 DUP2 PUSH2 0xEFD JUMP JUMPDEST PUSH2 0xDA4 DUP2 PUSH2 0xA6A JUMP JUMPDEST PUSH2 0xDA4 DUP2 PUSH2 0xF22 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD9 DUP3 PUSH2 0xEDB JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0xDED DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0xF53 JUMP JUMPDEST PUSH2 0xDF6 DUP2 PUSH2 0xF83 JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x2F2 DUP3 DUP5 PUSH2 0xD9B JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x2F2 DUP3 DUP5 PUSH2 0xDAA JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x2F2 DUP3 DUP5 PUSH2 0xDBC JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x2F2 DUP3 DUP5 PUSH2 0xDC5 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x327 DUP2 DUP5 PUSH2 0xDCE JUMP JUMPDEST PUSH1 0x40 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xE5D DUP2 DUP6 PUSH2 0xDCE JUMP JUMPDEST SWAP1 POP PUSH2 0x327 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xD9B JUMP JUMPDEST PUSH1 0x40 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xE7D DUP2 DUP6 PUSH2 0xDCE JUMP JUMPDEST SWAP1 POP PUSH2 0x327 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xDB3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0xEAB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0xECA 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 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF6E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF56 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xF7D JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP1 JUMP STOP MLOAD SSTORE 0x49 MSTORE GASLIMIT DIFFICULTY STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 NUMBER 0x5d LOG1 POP 0x2f 0xb7 DUP7 EXP 0x4d 0xe6 SGT PUSH28 0x1B37F4C2CEC6BFD388958FFDC0BF408F578BCB86C6578706572696D PUSH6 0x6E74616CF500 CALLDATACOPY ", - "sourceMap": "685:5658:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;685:5658:0;;;;;;;" + "object": "0x608060405234801561001057600080fd5b506112b8806100206000396000f3006080604052600436106100da5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630301d5e181146100df578063076eec081461011657806318c535d9146101435780633f2a25ec146101635780634b3687681461018357806378bbae9b146101a357806382e2fa24146101c357806384f87758146101f0578063a4b1965414610210578063b1840e8d1461023e578063b79650a41461026b578063be766f1b1461028b578063cc12cb28146102b8578063e3a85ce4146102e5578063f06f300d14610305575b600080fd5b3480156100eb57600080fd5b506100ff6100fa366004610b57565b610325565b60405161010d9291906110c1565b60405180910390f35b34801561012257600080fd5b50610136610131366004610bfd565b610339565b60405161010d9190611090565b34801561014f57600080fd5b5061013661015e366004610b94565b610354565b34801561016f57600080fd5b5061013661017e366004610c44565b610367565b34801561018f57600080fd5b5061013661019e366004610d02565b610384565b3480156101af57600080fd5b506101366101be366004610d74565b610397565b3480156101cf57600080fd5b506101e36101de366004610bfd565b6103e1565b60405161010d9190611058565b3480156101fc57600080fd5b5061013661020b366004610ca8565b6103f3565b34801561021c57600080fd5b5061023061022b366004610b57565b610406565b60405161010d9291906110a1565b34801561024a57600080fd5b5061025e610259366004610b94565b610413565b60405161010d9190611066565b34801561027757600080fd5b50610136610286366004610ca8565b610439565b34801561029757600080fd5b506102ab6102a6366004610bfd565b61044c565b60405161010d9190611074565b3480156102c457600080fd5b506102d86102d3366004610bfd565b61045e565b60405161010d9190611082565b3480156102f157600080fd5b506102ab610300366004610bfd565b610470565b34801561031157600080fd5b5061025e610320366004610b94565b610482565b6060600061033283610494565b9293915050565b606061034b838363ffffffff61056116565b90505b92915050565b606061036083836105bc565b5090919050565b606061037a84848463ffffffff61061916565b50825b9392505050565b606061037a84848463ffffffff6106a216565b606060008551838501111515156103ad57600080fd5b855185840111156103bd57600080fd5b6103c686610706565b90506103d78582018583018561070c565b5093949350505050565b600061034b838363ffffffff6107cf16565b606061037a84848463ffffffff61083016565b6060600061033283610876565b600061041e83610494565b5061042882610494565b5061034b838363ffffffff6108ef16565b606061037a84848463ffffffff610a1916565b600061034b838363ffffffff610a2416565b600061034b838363ffffffff610a6f16565b600061034b838363ffffffff610adc16565b600061034b838363ffffffff6108ef16565b60008082511115156104db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d290611101565b60405180910390fd5b815182907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061050b57fe5b016020015182517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01909252507f0100000000000000000000000000000000000000000000000000000000000000908190040290565b6060600061056f8484610adc565b90506020830192508083018451101515156105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d2906110e1565b50500190565b805182518111156105f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d290611111565b61061461060584610706565b61060e84610706565b8361070c565b505050565b8251601483011115610657576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d290611121565b6014919092010180517fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091189052565b805182602001018351101515156106e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d2906110e1565b610614826106f285610706565b016106fc83610ae8565b835160200161070c565b60200190565b6020811015610736576001816020036101000a038019835116818551168082178652505050610614565b8282141561074357610614565b8282111561077d5760208103905080820181840181515b8285101561077557845186526020958601959094019361075a565b905250610614565b60208103905080820181840183515b818612156107c657825182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0928301929091019061078c565b85525050505050565b600081601401835110151515610811576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d290611121565b50016014015173ffffffffffffffffffffffffffffffffffffffff1690565b825160208301111561086e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d2906110f1565b910160200152565b600060148251101515156108b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d290611121565b6108c48260148451036107cf565b82517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec019092525090565b60008151835114801561034b5750816040518082805190602001908083835b6020831061094b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161090e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052604051919093018190038120885190955088945090928392508401908083835b602083106109e057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109a3565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902060001916149392505050565b610614838383610830565b600081602001835110151515610a66576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d2906110f1565b50016020015190565b600081600401835110151515610ab1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d290611131565b5050602001517fffffffff000000000000000000000000000000000000000000000000000000001690565b600061034b8383610a24565b90565b600061034b82356111b2565b600061034b8235610ae8565b6000601f82018313610b1457600080fd5b8135610b27610b2282611168565b611141565b91508082526020830160208301858383011115610b4357600080fd5b610b4e83828461121a565b50505092915050565b600060208284031215610b6957600080fd5b813567ffffffffffffffff811115610b8057600080fd5b610b8c84828501610b03565b949350505050565b60008060408385031215610ba757600080fd5b823567ffffffffffffffff811115610bbe57600080fd5b610bca85828601610b03565b925050602083013567ffffffffffffffff811115610be757600080fd5b610bf385828601610b03565b9150509250929050565b60008060408385031215610c1057600080fd5b823567ffffffffffffffff811115610c2757600080fd5b610c3385828601610b03565b9250506020610bf385828601610af7565b600080600060608486031215610c5957600080fd5b833567ffffffffffffffff811115610c7057600080fd5b610c7c86828701610b03565b9350506020610c8d86828701610af7565b9250506040610c9e86828701610aeb565b9150509250925092565b600080600060608486031215610cbd57600080fd5b833567ffffffffffffffff811115610cd457600080fd5b610ce086828701610b03565b9350506020610cf186828701610af7565b9250506040610c9e86828701610af7565b600080600060608486031215610d1757600080fd5b833567ffffffffffffffff811115610d2e57600080fd5b610d3a86828701610b03565b9350506020610d4b86828701610af7565b925050604084013567ffffffffffffffff811115610d6857600080fd5b610c9e86828701610b03565b60008060008060808587031215610d8a57600080fd5b843567ffffffffffffffff811115610da157600080fd5b610dad87828801610b03565b9450506020610dbe87828801610af7565b9350506040610dcf87828801610af7565b9250506060610de087828801610af7565b91505092959194509250565b610df5816111b2565b82525050565b610df5816111cb565b610df5816111d0565b610df581610ae8565b610df5816111f5565b6000610e2a826111ae565b808452610e3e816020860160208601611226565b610e4781611256565b9093016020019392505050565b603081527f475245415445525f4f525f455155414c5f544f5f4e45535445445f425954455360208201527f5f4c454e4754485f524551554952454400000000000000000000000000000000604082015260600190565b602681527f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f524560208201527f5155495245440000000000000000000000000000000000000000000000000000604082015260600190565b602181527f475245415445525f5448414e5f5a45524f5f4c454e4754485f5245515549524560208201527f4400000000000000000000000000000000000000000000000000000000000000604082015260600190565b603081527f475245415445525f4f525f455155414c5f544f5f534f555243455f425954455360208201527f5f4c454e4754485f524551554952454400000000000000000000000000000000604082015260600190565b602681527f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524560208201527f5155495245440000000000000000000000000000000000000000000000000000604082015260600190565b602581527f475245415445525f4f525f455155414c5f544f5f345f4c454e4754485f52455160208201527f5549524544000000000000000000000000000000000000000000000000000000604082015260600190565b6020810161034e8284610dec565b6020810161034e8284610dfb565b6020810161034e8284610e0d565b6020810161034e8284610e16565b6020808252810161034b8184610e1f565b604080825281016110b28185610e1f565b905061037d6020830184610dec565b604080825281016110d28185610e1f565b905061037d6020830184610e04565b6020808252810161034e81610e54565b6020808252810161034e81610eaa565b6020808252810161034e81610f00565b6020808252810161034e81610f56565b6020808252810161034e81610fac565b6020808252810161034e81611002565b60405181810167ffffffffffffffff8111828210171561116057600080fd5b604052919050565b600067ffffffffffffffff82111561117f57600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b151590565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b82818337506000910152565b60005b83811015611241578181015183820152602001611229565b83811115611250576000848401525b50505050565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a72305820a09f1c20c853f86425fa5b7abe0ba016f056cece7e075e7a528a56c0fe4205ed6c6578706572696d656e74616cf50037", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x12B8 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xDA JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x301D5E1 DUP2 EQ PUSH2 0xDF JUMPI DUP1 PUSH4 0x76EEC08 EQ PUSH2 0x116 JUMPI DUP1 PUSH4 0x18C535D9 EQ PUSH2 0x143 JUMPI DUP1 PUSH4 0x3F2A25EC EQ PUSH2 0x163 JUMPI DUP1 PUSH4 0x4B368768 EQ PUSH2 0x183 JUMPI DUP1 PUSH4 0x78BBAE9B EQ PUSH2 0x1A3 JUMPI DUP1 PUSH4 0x82E2FA24 EQ PUSH2 0x1C3 JUMPI DUP1 PUSH4 0x84F87758 EQ PUSH2 0x1F0 JUMPI DUP1 PUSH4 0xA4B19654 EQ PUSH2 0x210 JUMPI DUP1 PUSH4 0xB1840E8D EQ PUSH2 0x23E JUMPI DUP1 PUSH4 0xB79650A4 EQ PUSH2 0x26B JUMPI DUP1 PUSH4 0xBE766F1B EQ PUSH2 0x28B JUMPI DUP1 PUSH4 0xCC12CB28 EQ PUSH2 0x2B8 JUMPI DUP1 PUSH4 0xE3A85CE4 EQ PUSH2 0x2E5 JUMPI DUP1 PUSH4 0xF06F300D EQ PUSH2 0x305 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0xFA CALLDATASIZE PUSH1 0x4 PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x325 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10D SWAP3 SWAP2 SWAP1 PUSH2 0x10C1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x122 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x131 CALLDATASIZE PUSH1 0x4 PUSH2 0xBFD JUMP JUMPDEST PUSH2 0x339 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10D SWAP2 SWAP1 PUSH2 0x1090 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x15E CALLDATASIZE PUSH1 0x4 PUSH2 0xB94 JUMP JUMPDEST PUSH2 0x354 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x16F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x17E CALLDATASIZE PUSH1 0x4 PUSH2 0xC44 JUMP JUMPDEST PUSH2 0x367 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x19E CALLDATASIZE PUSH1 0x4 PUSH2 0xD02 JUMP JUMPDEST PUSH2 0x384 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x1BE CALLDATASIZE PUSH1 0x4 PUSH2 0xD74 JUMP JUMPDEST PUSH2 0x397 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E3 PUSH2 0x1DE CALLDATASIZE PUSH1 0x4 PUSH2 0xBFD JUMP JUMPDEST PUSH2 0x3E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10D SWAP2 SWAP1 PUSH2 0x1058 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0xCA8 JUMP JUMPDEST PUSH2 0x3F3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x230 PUSH2 0x22B CALLDATASIZE PUSH1 0x4 PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x406 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10D SWAP3 SWAP2 SWAP1 PUSH2 0x10A1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x24A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25E PUSH2 0x259 CALLDATASIZE PUSH1 0x4 PUSH2 0xB94 JUMP JUMPDEST PUSH2 0x413 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10D SWAP2 SWAP1 PUSH2 0x1066 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x277 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x286 CALLDATASIZE PUSH1 0x4 PUSH2 0xCA8 JUMP JUMPDEST PUSH2 0x439 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x297 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AB PUSH2 0x2A6 CALLDATASIZE PUSH1 0x4 PUSH2 0xBFD JUMP JUMPDEST PUSH2 0x44C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10D SWAP2 SWAP1 PUSH2 0x1074 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D8 PUSH2 0x2D3 CALLDATASIZE PUSH1 0x4 PUSH2 0xBFD JUMP JUMPDEST PUSH2 0x45E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10D SWAP2 SWAP1 PUSH2 0x1082 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AB PUSH2 0x300 CALLDATASIZE PUSH1 0x4 PUSH2 0xBFD JUMP JUMPDEST PUSH2 0x470 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x311 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25E PUSH2 0x320 CALLDATASIZE PUSH1 0x4 PUSH2 0xB94 JUMP JUMPDEST PUSH2 0x482 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x332 DUP4 PUSH2 0x494 JUMP JUMPDEST SWAP3 SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x34B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x561 AND JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x360 DUP4 DUP4 PUSH2 0x5BC JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x37A DUP5 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x619 AND JUMP JUMPDEST POP DUP3 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x37A DUP5 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x6A2 AND JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP6 MLOAD DUP4 DUP6 ADD GT ISZERO ISZERO ISZERO PUSH2 0x3AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 MLOAD DUP6 DUP5 ADD GT ISZERO PUSH2 0x3BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3C6 DUP7 PUSH2 0x706 JUMP JUMPDEST SWAP1 POP PUSH2 0x3D7 DUP6 DUP3 ADD DUP6 DUP4 ADD DUP6 PUSH2 0x70C JUMP JUMPDEST POP SWAP4 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x7CF AND JUMP JUMPDEST PUSH1 0x60 PUSH2 0x37A DUP5 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x830 AND JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x332 DUP4 PUSH2 0x876 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x41E DUP4 PUSH2 0x494 JUMP JUMPDEST POP PUSH2 0x428 DUP3 PUSH2 0x494 JUMP JUMPDEST POP PUSH2 0x34B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x8EF AND JUMP JUMPDEST PUSH1 0x60 PUSH2 0x37A DUP5 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0xA19 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0xA24 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0xA6F AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0xADC AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x8EF AND JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT ISZERO ISZERO PUSH2 0x4DB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x1101 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP3 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x50B JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD DUP3 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP3 MSTORE POP PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV MUL SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x56F DUP5 DUP5 PUSH2 0xADC JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP4 ADD SWAP3 POP DUP1 DUP4 ADD DUP5 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x5B6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x10E1 JUMP JUMPDEST POP POP ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 MLOAD DUP2 GT ISZERO PUSH2 0x5F9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x1111 JUMP JUMPDEST PUSH2 0x614 PUSH2 0x605 DUP5 PUSH2 0x706 JUMP JUMPDEST PUSH2 0x60E DUP5 PUSH2 0x706 JUMP JUMPDEST DUP4 PUSH2 0x70C JUMP JUMPDEST POP POP POP JUMP JUMPDEST DUP3 MLOAD PUSH1 0x14 DUP4 ADD GT ISZERO PUSH2 0x657 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x1121 JUMP JUMPDEST PUSH1 0x14 SWAP2 SWAP1 SWAP3 ADD ADD DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 XOR SWAP1 MSTORE JUMP JUMPDEST DUP1 MLOAD DUP3 PUSH1 0x20 ADD ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x6E5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x10E1 JUMP JUMPDEST PUSH2 0x614 DUP3 PUSH2 0x6F2 DUP6 PUSH2 0x706 JUMP JUMPDEST ADD PUSH2 0x6FC DUP4 PUSH2 0xAE8 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x20 ADD PUSH2 0x70C JUMP JUMPDEST PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x736 JUMPI PUSH1 0x1 DUP2 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP4 MLOAD AND DUP2 DUP6 MLOAD AND DUP1 DUP3 OR DUP7 MSTORE POP POP POP PUSH2 0x614 JUMP JUMPDEST DUP3 DUP3 EQ ISZERO PUSH2 0x743 JUMPI PUSH2 0x614 JUMP JUMPDEST DUP3 DUP3 GT ISZERO PUSH2 0x77D JUMPI PUSH1 0x20 DUP2 SUB SWAP1 POP DUP1 DUP3 ADD DUP2 DUP5 ADD DUP2 MLOAD JUMPDEST DUP3 DUP6 LT ISZERO PUSH2 0x775 JUMPI DUP5 MLOAD DUP7 MSTORE PUSH1 0x20 SWAP6 DUP7 ADD SWAP6 SWAP1 SWAP5 ADD SWAP4 PUSH2 0x75A JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x614 JUMP JUMPDEST PUSH1 0x20 DUP2 SUB SWAP1 POP DUP1 DUP3 ADD DUP2 DUP5 ADD DUP4 MLOAD JUMPDEST DUP2 DUP7 SLT ISZERO PUSH2 0x7C6 JUMPI DUP3 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x78C JUMP JUMPDEST DUP6 MSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x811 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x1121 JUMP JUMPDEST POP ADD PUSH1 0x14 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP4 ADD GT ISZERO PUSH2 0x86E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x10F1 JUMP JUMPDEST SWAP2 ADD PUSH1 0x20 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x14 DUP3 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x8B6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x1121 JUMP JUMPDEST PUSH2 0x8C4 DUP3 PUSH1 0x14 DUP5 MLOAD SUB PUSH2 0x7CF JUMP JUMPDEST DUP3 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC ADD SWAP1 SWAP3 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP4 MLOAD EQ DUP1 ISZERO PUSH2 0x34B JUMPI POP DUP2 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x94B JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x90E JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 DUP9 MLOAD SWAP1 SWAP6 POP DUP9 SWAP5 POP SWAP1 SWAP3 DUP4 SWAP3 POP DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x9E0 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x9A3 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 PUSH1 0x0 NOT AND EQ SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x614 DUP4 DUP4 DUP4 PUSH2 0x830 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0xA66 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x10F1 JUMP JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0xAB1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x1131 JUMP JUMPDEST POP POP PUSH1 0x20 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP4 DUP4 PUSH2 0xA24 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP3 CALLDATALOAD PUSH2 0x11B2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP3 CALLDATALOAD PUSH2 0xAE8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0xB14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xB27 PUSH2 0xB22 DUP3 PUSH2 0x1168 JUMP JUMPDEST PUSH2 0x1141 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0xB43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB4E DUP4 DUP3 DUP5 PUSH2 0x121A JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB8C DUP5 DUP3 DUP6 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xBA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBCA DUP6 DUP3 DUP7 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBF3 DUP6 DUP3 DUP7 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xC10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xC27 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC33 DUP6 DUP3 DUP7 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0xBF3 DUP6 DUP3 DUP7 ADD PUSH2 0xAF7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xC59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xC70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC7C DUP7 DUP3 DUP8 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xC8D DUP7 DUP3 DUP8 ADD PUSH2 0xAF7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0xC9E DUP7 DUP3 DUP8 ADD PUSH2 0xAEB JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xCBD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xCD4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xCE0 DUP7 DUP3 DUP8 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xCF1 DUP7 DUP3 DUP8 ADD PUSH2 0xAF7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0xC9E DUP7 DUP3 DUP8 ADD PUSH2 0xAF7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xD17 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xD2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD3A DUP7 DUP3 DUP8 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xD4B DUP7 DUP3 DUP8 ADD PUSH2 0xAF7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xD68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC9E DUP7 DUP3 DUP8 ADD PUSH2 0xB03 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xD8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xDA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDAD DUP8 DUP3 DUP9 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0xDBE DUP8 DUP3 DUP9 ADD PUSH2 0xAF7 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0xDCF DUP8 DUP3 DUP9 ADD PUSH2 0xAF7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0xDE0 DUP8 DUP3 DUP9 ADD PUSH2 0xAF7 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH2 0xDF5 DUP2 PUSH2 0x11B2 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0xDF5 DUP2 PUSH2 0x11CB JUMP JUMPDEST PUSH2 0xDF5 DUP2 PUSH2 0x11D0 JUMP JUMPDEST PUSH2 0xDF5 DUP2 PUSH2 0xAE8 JUMP JUMPDEST PUSH2 0xDF5 DUP2 PUSH2 0x11F5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE2A DUP3 PUSH2 0x11AE JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0xE3E DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1226 JUMP JUMPDEST PUSH2 0xE47 DUP2 PUSH2 0x1256 JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x30 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F4E45535445445F4259544553 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5F4C454E4754485F524551554952454400000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F33325F4C454E4754485F5245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x21 DUP2 MSTORE PUSH32 0x475245415445525F5448414E5F5A45524F5F4C454E4754485F52455155495245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x4400000000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x30 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F534F555243455F4259544553 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5F4C454E4754485F524551554952454400000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F345F4C454E4754485F524551 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5549524544000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x34E DUP3 DUP5 PUSH2 0xDEC JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x34E DUP3 DUP5 PUSH2 0xDFB JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x34E DUP3 DUP5 PUSH2 0xE0D JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x34E DUP3 DUP5 PUSH2 0xE16 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x34B DUP2 DUP5 PUSH2 0xE1F JUMP JUMPDEST PUSH1 0x40 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10B2 DUP2 DUP6 PUSH2 0xE1F JUMP JUMPDEST SWAP1 POP PUSH2 0x37D PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xDEC JUMP JUMPDEST PUSH1 0x40 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10D2 DUP2 DUP6 PUSH2 0xE1F JUMP JUMPDEST SWAP1 POP PUSH2 0x37D PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xE04 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x34E DUP2 PUSH2 0xE54 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x34E DUP2 PUSH2 0xEAA JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x34E DUP2 PUSH2 0xF00 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x34E DUP2 PUSH2 0xF56 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x34E DUP2 PUSH2 0xFAC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x34E DUP2 PUSH2 0x1002 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1160 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x117F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1241 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1229 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1250 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 LOG0 SWAP16 SHR KECCAK256 0xc8 MSTORE8 0xf8 PUSH5 0x25FA5B7ABE SIGNEXTEND LOG0 AND CREATE JUMP 0xce 0xce PUSH31 0x75E7A528A56C0FE4205ED6C6578706572696D656E74616CF5003700000000 ", + "sourceMap": "685:7079:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;685:7079:0;;;;;;;" }, "deployedBytecode": { "linkReferences": {}, - "object": "0x6080604052600436106100c45763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630301d5e181146100c95780630945c63b1461010057806318c535d91461012d57806335997eaf1461015a5780633f2a25ec1461017a578063595fe5471461019a5780637d0d772f146101c757806382e2fa24146101e757806384f8775814610214578063a4b1965414610234578063b79650a414610262578063be766f1b14610282578063e3a85ce4146102af575b600080fd5b3480156100d557600080fd5b506100e96100e4366004610b7e565b6102cf565b6040516100f7929190610e6c565b60405180910390f35b34801561010c57600080fd5b5061012061011b366004610bbb565b6102e3565b6040516100f79190610e11565b34801561013957600080fd5b5061014d610148366004610bbb565b6102f8565b6040516100f79190610e3b565b34801561016657600080fd5b5061014d610175366004610c24565b61030b565b34801561018657600080fd5b5061014d610195366004610c6b565b610317565b3480156101a657600080fd5b506101ba6101b5366004610b7e565b61032e565b6040516100f79190610e2d565b3480156101d357600080fd5b5061014d6101e2366004610d29565b610339565b3480156101f357600080fd5b50610207610202366004610c24565b610346565b6040516100f79190610e03565b34801561022057600080fd5b5061014d61022f366004610ccf565b610352565b34801561024057600080fd5b5061025461024f366004610b7e565b61035f565b6040516100f7929190610e4c565b34801561026e57600080fd5b5061014d61027d366004610ccf565b61036c565b34801561028e57600080fd5b506102a261029d366004610c24565b610379565b6040516100f79190610e1f565b3480156102bb57600080fd5b506102a26102ca366004610c24565b610385565b606060006102dc83610391565b9293915050565b60006102ef838361046b565b90505b92915050565b606061030483836104b2565b5090919050565b60606102ef838361055d565b6060610324848484610656565b50825b9392505050565b60006102f2826106f3565b6060610324848484610784565b60006102ef8383610834565b60606103248484846108cc565b606060006102dc8361094b565b60606103248484846109dd565b60006102ef83836109e8565b60006102ef8383610379565b600080825111606060405190810160405280602181526020017f475245415445525f5448414e5f5a45524f5f4c454e4754485f5245515549524581526020017f44000000000000000000000000000000000000000000000000000000000000008152509015156104205760405160e560020a62461bcd0281526004016104179190610e3b565b60405180910390fd5b5081518290600019810190811061043357fe5b0160200151825160001901909252507f0100000000000000000000000000000000000000000000000000000000000000908190040290565b60006020601f8451010460018101905060005b818110156104aa576020810285810151908501518082149450846104a0578392505b505060010161047e565b505092915050565b8051825160408051606081018252603081527f475245415445525f4f525f455155414c5f544f5f534f555243455f425954455360208201527f5f4c454e4754485f52455155495245440000000000000000000000000000000091810191909152908211156105365760405160e560020a62461bcd0281526004016104179190610e3b565b5061055861054384610a6a565b60200161054f84610a6a565b60200183610a6d565b505050565b6060600061056b8484610379565b905060208301925080830184511015606060405190810160405280603081526020017f475245415445525f4f525f455155414c5f544f5f4e45535445445f425954455381526020017f5f4c454e4754485f5245515549524544000000000000000000000000000000008152509015156105fa5760405160e560020a62461bcd0281526004016104179190610e3b565b50806040519080825280601f01601f191660200182016040528015610629578160200160208202803883390190505b50915061064f61063883610a6a565b6020018461064587610a6a565b0160200183610a6d565b5092915050565b8160140183511015606060405190810160405280602681526020017f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f52458152602001600080516020610f8e8339815191528152509015156106cc5760405160e560020a62461bcd0281526004016104179190610e3b565b509101601401805173ffffffffffffffffffffffffffffffffffffffff1916919091189052565b6000600482511015606060405190810160405280602581526020017f475245415445525f4f525f455155414c5f544f5f345f4c454e4754485f52455181526020017f554952454400000000000000000000000000000000000000000000000000000081525090151561077b5760405160e560020a62461bcd0281526004016104179190610e3b565b50506020015190565b8051826020010183511015606060405190810160405280603081526020017f475245415445525f4f525f455155414c5f544f5f4e45535445445f425954455381526020017f5f4c454e4754485f52455155495245440000000000000000000000000000000081525090151561080f5760405160e560020a62461bcd0281526004016104179190610e3b565b506105588261081d85610a6a565b6020010161082a83610a6a565b8351602001610a6d565b60008160140183511015606060405190810160405280602681526020017f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f52458152602001600080516020610f8e8339815191528152509015156108ac5760405160e560020a62461bcd0281526004016104179190610e3b565b5050016014015173ffffffffffffffffffffffffffffffffffffffff1690565b8160200183511015606060405190810160405280602681526020017f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f52458152602001600080516020610f8e8339815191528152509015156109425760405160e560020a62461bcd0281526004016104179190610e3b565b50910160200152565b6000601482511015606060405190810160405280602681526020017f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f52458152602001600080516020610f8e8339815191528152509015156109c15760405160e560020a62461bcd0281526004016104179190610e3b565b506109d0826014845103610834565b8251601319019092525090565b6105588383836108cc565b60008160200183511015606060405190810160405280602681526020017f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f52458152602001600080516020610f8e833981519152815250901515610a605760405160e560020a62461bcd0281526004016104179190610e3b565b5050016020015190565b90565b6020811015610a97576001816020036101000a038019835116818551168082178652505050610558565b82821415610aa457610558565b82821115610ade5760208103905080820181840181515b82851015610ad6578451865260209586019590940193610abb565b905250610558565b60208103905080820181840183515b81861215610b095782518252601f199283019290910190610aed565b85525050505050565b60006103278235610edf565b60006103278235610a6a565b6000601f82018313610b3b57600080fd5b8135610b4e610b4982610eb3565b610e8c565b91508082526020830160208301858383011115610b6a57600080fd5b610b75838284610f47565b50505092915050565b600060208284031215610b9057600080fd5b813567ffffffffffffffff811115610ba757600080fd5b610bb384828501610b2a565b949350505050565b60008060408385031215610bce57600080fd5b823567ffffffffffffffff811115610be557600080fd5b610bf185828601610b2a565b925050602083013567ffffffffffffffff811115610c0e57600080fd5b610c1a85828601610b2a565b9150509250929050565b60008060408385031215610c3757600080fd5b823567ffffffffffffffff811115610c4e57600080fd5b610c5a85828601610b2a565b9250506020610c1a85828601610b1e565b600080600060608486031215610c8057600080fd5b833567ffffffffffffffff811115610c9757600080fd5b610ca386828701610b2a565b9350506020610cb486828701610b1e565b9250506040610cc586828701610b12565b9150509250925092565b600080600060608486031215610ce457600080fd5b833567ffffffffffffffff811115610cfb57600080fd5b610d0786828701610b2a565b9350506020610d1886828701610b1e565b9250506040610cc586828701610b1e565b600080600060608486031215610d3e57600080fd5b833567ffffffffffffffff811115610d5557600080fd5b610d6186828701610b2a565b9350506020610d7286828701610b1e565b925050604084013567ffffffffffffffff811115610d8f57600080fd5b610cc586828701610b2a565b610da481610edf565b82525050565b610da481610ef8565b610da481610efd565b610da481610a6a565b610da481610f22565b6000610dd982610edb565b808452610ded816020860160208601610f53565b610df681610f83565b9093016020019392505050565b602081016102f28284610d9b565b602081016102f28284610daa565b602081016102f28284610dbc565b602081016102f28284610dc5565b602080825281016103278184610dce565b60408082528101610e5d8185610dce565b90506103276020830184610d9b565b60408082528101610e7d8185610dce565b90506103276020830184610db3565b60405181810167ffffffffffffffff81118282101715610eab57600080fd5b604052919050565b600067ffffffffffffffff821115610eca57600080fd5b506020601f91909101601f19160190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b151590565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b82818337506000910152565b60005b83811015610f6e578181015183820152602001610f56565b83811115610f7d576000848401525b50505050565b601f01601f19169056005155495245440000000000000000000000000000000000000000000000000000a265627a7a72305820435da1502fb7860a4de6137b01b37f4c2cec6bfd388958ffdc0bf408f578bcb86c6578706572696d656e74616cf50037", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC4 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x301D5E1 DUP2 EQ PUSH2 0xC9 JUMPI DUP1 PUSH4 0x945C63B EQ PUSH2 0x100 JUMPI DUP1 PUSH4 0x18C535D9 EQ PUSH2 0x12D JUMPI DUP1 PUSH4 0x35997EAF EQ PUSH2 0x15A JUMPI DUP1 PUSH4 0x3F2A25EC EQ PUSH2 0x17A JUMPI DUP1 PUSH4 0x595FE547 EQ PUSH2 0x19A JUMPI DUP1 PUSH4 0x7D0D772F EQ PUSH2 0x1C7 JUMPI DUP1 PUSH4 0x82E2FA24 EQ PUSH2 0x1E7 JUMPI DUP1 PUSH4 0x84F87758 EQ PUSH2 0x214 JUMPI DUP1 PUSH4 0xA4B19654 EQ PUSH2 0x234 JUMPI DUP1 PUSH4 0xB79650A4 EQ PUSH2 0x262 JUMPI DUP1 PUSH4 0xBE766F1B EQ PUSH2 0x282 JUMPI DUP1 PUSH4 0xE3A85CE4 EQ PUSH2 0x2AF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE9 PUSH2 0xE4 CALLDATASIZE PUSH1 0x4 PUSH2 0xB7E JUMP JUMPDEST PUSH2 0x2CF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF7 SWAP3 SWAP2 SWAP1 PUSH2 0xE6C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0x11B CALLDATASIZE PUSH1 0x4 PUSH2 0xBBB JUMP JUMPDEST PUSH2 0x2E3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF7 SWAP2 SWAP1 PUSH2 0xE11 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x139 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14D PUSH2 0x148 CALLDATASIZE PUSH1 0x4 PUSH2 0xBBB JUMP JUMPDEST PUSH2 0x2F8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF7 SWAP2 SWAP1 PUSH2 0xE3B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x166 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14D PUSH2 0x175 CALLDATASIZE PUSH1 0x4 PUSH2 0xC24 JUMP JUMPDEST PUSH2 0x30B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x186 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14D PUSH2 0x195 CALLDATASIZE PUSH1 0x4 PUSH2 0xC6B JUMP JUMPDEST PUSH2 0x317 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH2 0x1B5 CALLDATASIZE PUSH1 0x4 PUSH2 0xB7E JUMP JUMPDEST PUSH2 0x32E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF7 SWAP2 SWAP1 PUSH2 0xE2D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14D PUSH2 0x1E2 CALLDATASIZE PUSH1 0x4 PUSH2 0xD29 JUMP JUMPDEST PUSH2 0x339 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x207 PUSH2 0x202 CALLDATASIZE PUSH1 0x4 PUSH2 0xC24 JUMP JUMPDEST PUSH2 0x346 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF7 SWAP2 SWAP1 PUSH2 0xE03 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14D PUSH2 0x22F CALLDATASIZE PUSH1 0x4 PUSH2 0xCCF JUMP JUMPDEST PUSH2 0x352 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x240 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x254 PUSH2 0x24F CALLDATASIZE PUSH1 0x4 PUSH2 0xB7E JUMP JUMPDEST PUSH2 0x35F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF7 SWAP3 SWAP2 SWAP1 PUSH2 0xE4C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14D PUSH2 0x27D CALLDATASIZE PUSH1 0x4 PUSH2 0xCCF JUMP JUMPDEST PUSH2 0x36C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x28E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A2 PUSH2 0x29D CALLDATASIZE PUSH1 0x4 PUSH2 0xC24 JUMP JUMPDEST PUSH2 0x379 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF7 SWAP2 SWAP1 PUSH2 0xE1F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A2 PUSH2 0x2CA CALLDATASIZE PUSH1 0x4 PUSH2 0xC24 JUMP JUMPDEST PUSH2 0x385 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x2DC DUP4 PUSH2 0x391 JUMP JUMPDEST SWAP3 SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2EF DUP4 DUP4 PUSH2 0x46B JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x304 DUP4 DUP4 PUSH2 0x4B2 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x2EF DUP4 DUP4 PUSH2 0x55D JUMP JUMPDEST PUSH1 0x60 PUSH2 0x324 DUP5 DUP5 DUP5 PUSH2 0x656 JUMP JUMPDEST POP DUP3 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F2 DUP3 PUSH2 0x6F3 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x324 DUP5 DUP5 DUP5 PUSH2 0x784 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2EF DUP4 DUP4 PUSH2 0x834 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x324 DUP5 DUP5 DUP5 PUSH2 0x8CC JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x2DC DUP4 PUSH2 0x94B JUMP JUMPDEST PUSH1 0x60 PUSH2 0x324 DUP5 DUP5 DUP5 PUSH2 0x9DD JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2EF DUP4 DUP4 PUSH2 0x9E8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2EF DUP4 DUP4 PUSH2 0x379 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 0x420 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x417 SWAP2 SWAP1 PUSH2 0xE3B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP2 MLOAD DUP3 SWAP1 PUSH1 0x0 NOT DUP2 ADD SWAP1 DUP2 LT PUSH2 0x433 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD DUP3 MLOAD PUSH1 0x0 NOT ADD SWAP1 SWAP3 MSTORE POP PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 PUSH1 0x1F DUP5 MLOAD ADD DIV PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4AA JUMPI PUSH1 0x20 DUP2 MUL DUP6 DUP2 ADD MLOAD SWAP1 DUP6 ADD MLOAD DUP1 DUP3 EQ SWAP5 POP DUP5 PUSH2 0x4A0 JUMPI DUP4 SWAP3 POP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x47E JUMP JUMPDEST POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD DUP3 MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x30 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F534F555243455F4259544553 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5F4C454E4754485F524551554952454400000000000000000000000000000000 SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP3 GT ISZERO PUSH2 0x536 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x417 SWAP2 SWAP1 PUSH2 0xE3B JUMP JUMPDEST POP PUSH2 0x558 PUSH2 0x543 DUP5 PUSH2 0xA6A JUMP JUMPDEST PUSH1 0x20 ADD PUSH2 0x54F DUP5 PUSH2 0xA6A JUMP JUMPDEST PUSH1 0x20 ADD DUP4 PUSH2 0xA6D JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x56B DUP5 DUP5 PUSH2 0x379 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP4 ADD SWAP3 POP DUP1 DUP4 ADD DUP5 MLOAD LT ISZERO PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x475245415445525F4F525F455155414C5F544F5F4E45535445445F4259544553 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5F4C454E4754485F524551554952454400000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x5FA JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x417 SWAP2 SWAP1 PUSH2 0xE3B JUMP JUMPDEST POP DUP1 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x629 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH2 0x64F PUSH2 0x638 DUP4 PUSH2 0xA6A JUMP JUMPDEST PUSH1 0x20 ADD DUP5 PUSH2 0x645 DUP8 PUSH2 0xA6A JUMP JUMPDEST ADD PUSH1 0x20 ADD DUP4 PUSH2 0xA6D JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST 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 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xF8E DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x6CC JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x417 SWAP2 SWAP1 PUSH2 0xE3B JUMP JUMPDEST POP SWAP2 ADD PUSH1 0x14 ADD DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP2 SWAP1 SWAP2 XOR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4 DUP3 MLOAD LT ISZERO PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x475245415445525F4F525F455155414C5F544F5F345F4C454E4754485F524551 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5549524544000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x77B JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x417 SWAP2 SWAP1 PUSH2 0xE3B JUMP JUMPDEST POP POP PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 PUSH1 0x20 ADD ADD DUP4 MLOAD LT ISZERO PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x475245415445525F4F525F455155414C5F544F5F4E45535445445F4259544553 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5F4C454E4754485F524551554952454400000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x80F JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x417 SWAP2 SWAP1 PUSH2 0xE3B JUMP JUMPDEST POP PUSH2 0x558 DUP3 PUSH2 0x81D DUP6 PUSH2 0xA6A JUMP JUMPDEST PUSH1 0x20 ADD ADD PUSH2 0x82A DUP4 PUSH2 0xA6A JUMP JUMPDEST DUP4 MLOAD PUSH1 0x20 ADD PUSH2 0xA6D 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 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xF8E DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x8AC JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x417 SWAP2 SWAP1 PUSH2 0xE3B JUMP JUMPDEST POP POP ADD PUSH1 0x14 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST 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 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xF8E DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x942 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x417 SWAP2 SWAP1 PUSH2 0xE3B JUMP JUMPDEST POP SWAP2 ADD PUSH1 0x20 ADD MSTORE 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 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xF8E DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x9C1 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x417 SWAP2 SWAP1 PUSH2 0xE3B JUMP JUMPDEST POP PUSH2 0x9D0 DUP3 PUSH1 0x14 DUP5 MLOAD SUB PUSH2 0x834 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x13 NOT ADD SWAP1 SWAP3 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x558 DUP4 DUP4 DUP4 PUSH2 0x8CC 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 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xF8E DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0xA60 JUMPI PUSH1 0x40 MLOAD PUSH1 0xE5 PUSH1 0x2 EXP PUSH3 0x461BCD MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x417 SWAP2 SWAP1 PUSH2 0xE3B JUMP JUMPDEST POP POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA97 JUMPI PUSH1 0x1 DUP2 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP4 MLOAD AND DUP2 DUP6 MLOAD AND DUP1 DUP3 OR DUP7 MSTORE POP POP POP PUSH2 0x558 JUMP JUMPDEST DUP3 DUP3 EQ ISZERO PUSH2 0xAA4 JUMPI PUSH2 0x558 JUMP JUMPDEST DUP3 DUP3 GT ISZERO PUSH2 0xADE JUMPI PUSH1 0x20 DUP2 SUB SWAP1 POP DUP1 DUP3 ADD DUP2 DUP5 ADD DUP2 MLOAD JUMPDEST DUP3 DUP6 LT ISZERO PUSH2 0xAD6 JUMPI DUP5 MLOAD DUP7 MSTORE PUSH1 0x20 SWAP6 DUP7 ADD SWAP6 SWAP1 SWAP5 ADD SWAP4 PUSH2 0xABB JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x558 JUMP JUMPDEST PUSH1 0x20 DUP2 SUB SWAP1 POP DUP1 DUP3 ADD DUP2 DUP5 ADD DUP4 MLOAD JUMPDEST DUP2 DUP7 SLT ISZERO PUSH2 0xB09 JUMPI DUP3 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xAED JUMP JUMPDEST DUP6 MSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x327 DUP3 CALLDATALOAD PUSH2 0xEDF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x327 DUP3 CALLDATALOAD PUSH2 0xA6A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0xB3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xB4E PUSH2 0xB49 DUP3 PUSH2 0xEB3 JUMP JUMPDEST PUSH2 0xE8C JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0xB6A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB75 DUP4 DUP3 DUP5 PUSH2 0xF47 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB90 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBB3 DUP5 DUP3 DUP6 ADD PUSH2 0xB2A JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xBCE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBE5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBF1 DUP6 DUP3 DUP7 ADD PUSH2 0xB2A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xC0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC1A DUP6 DUP3 DUP7 ADD PUSH2 0xB2A JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xC37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xC4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC5A DUP6 DUP3 DUP7 ADD PUSH2 0xB2A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0xC1A DUP6 DUP3 DUP7 ADD PUSH2 0xB1E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xC80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xC97 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xCA3 DUP7 DUP3 DUP8 ADD PUSH2 0xB2A JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xCB4 DUP7 DUP3 DUP8 ADD PUSH2 0xB1E JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0xCC5 DUP7 DUP3 DUP8 ADD PUSH2 0xB12 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xCE4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xCFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD07 DUP7 DUP3 DUP8 ADD PUSH2 0xB2A JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xD18 DUP7 DUP3 DUP8 ADD PUSH2 0xB1E JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0xCC5 DUP7 DUP3 DUP8 ADD PUSH2 0xB1E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xD3E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xD55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD61 DUP7 DUP3 DUP8 ADD PUSH2 0xB2A JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xD72 DUP7 DUP3 DUP8 ADD PUSH2 0xB1E JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xD8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xCC5 DUP7 DUP3 DUP8 ADD PUSH2 0xB2A JUMP JUMPDEST PUSH2 0xDA4 DUP2 PUSH2 0xEDF JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0xDA4 DUP2 PUSH2 0xEF8 JUMP JUMPDEST PUSH2 0xDA4 DUP2 PUSH2 0xEFD JUMP JUMPDEST PUSH2 0xDA4 DUP2 PUSH2 0xA6A JUMP JUMPDEST PUSH2 0xDA4 DUP2 PUSH2 0xF22 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD9 DUP3 PUSH2 0xEDB JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0xDED DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0xF53 JUMP JUMPDEST PUSH2 0xDF6 DUP2 PUSH2 0xF83 JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x2F2 DUP3 DUP5 PUSH2 0xD9B JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x2F2 DUP3 DUP5 PUSH2 0xDAA JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x2F2 DUP3 DUP5 PUSH2 0xDBC JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x2F2 DUP3 DUP5 PUSH2 0xDC5 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x327 DUP2 DUP5 PUSH2 0xDCE JUMP JUMPDEST PUSH1 0x40 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xE5D DUP2 DUP6 PUSH2 0xDCE JUMP JUMPDEST SWAP1 POP PUSH2 0x327 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xD9B JUMP JUMPDEST PUSH1 0x40 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xE7D DUP2 DUP6 PUSH2 0xDCE JUMP JUMPDEST SWAP1 POP PUSH2 0x327 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xDB3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0xEAB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0xECA 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 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF6E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF56 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xF7D JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP1 JUMP STOP MLOAD SSTORE 0x49 MSTORE GASLIMIT DIFFICULTY STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 NUMBER 0x5d LOG1 POP 0x2f 0xb7 DUP7 EXP 0x4d 0xe6 SGT PUSH28 0x1B37F4C2CEC6BFD388958FFDC0BF408F578BCB86C6578706572696D PUSH6 0x6E74616CF500 CALLDATACOPY ", - "sourceMap": "685:5658:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;904:189;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;904:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;1697:196;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1697:196:0;;;;;;;;;;;;;;;;;2139:219;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2139:219:0;;;;;;;;;;;;;;;;;5634:216;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5634:216:0;;;;;;;;;3024:231;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3024:231:0;;;;;;;;;5268:168;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5268:168:0;;;;;;;;;;;;;;;;;6109:232;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6109:232:0;;;;;;;;;2572:215;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2572:215:0;;;;;;;;;;;;;;;;;3942:231;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3942:231:0;;;;;;;;;1288:196;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1288:196:0;;;;;;;;;;;;;;;;;;4860:231;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4860:231:0;;;;;;;;;3491:215;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3491:215:0;;;;;;;;;;;;;;;;;4409;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4409:215:0;;;;;;;;;904:189;992:5;1006:13;1044:14;1056:1;1044:11;:14::i;:::-;1076:1;;904:189;-1:-1:-1;;904:189:0:o;1697:196::-;1807:10;1841:23;1855:3;1860;1841:13;:23::i;:::-;1833:31;-1:-1:-1;1697:196:0;;;;;:::o;2139:219::-;2275:5;2303:27;2317:4;2323:6;2303:13;:27::i;:::-;-1:-1:-1;2347:4:0;;2139:219;-1:-1:-1;2139:219:0:o;5634:216::-;5757:19;5801;5811:1;5814:5;5801:9;:19::i;3024:231::-;3173:5;3201:29;3214:1;3217:5;3224;3201:12;:29::i;:::-;-1:-1:-1;3247:1:0;3024:231;;;;;;:::o;5268:168::-;5355:13;5393;5404:1;5393:10;:13::i;6109:232::-;6261:5;6289:27;6300:1;6303:5;6310;6289:10;:27::i;2572:215::-;2697:14;2736:21;2748:1;2751:5;2736:11;:21::i;3942:231::-;4091:5;4119:29;4132:1;4135:5;4142;4119:12;:29::i;1288:196::-;1379:5;1393:14;1432:17;1447:1;1432:14;:17::i;4860:231::-;5009:5;5037:29;5050:1;5053:5;5060;5037:12;:29::i;3491:215::-;3616:14;3655:21;3667:1;3670:5;3655:11;:21::i;4409:215::-;4534:14;4573:21;4585:1;4588:5;4573:11;:21::i;1520:446:1:-;1604:13;1665:1;1654;:8;:12;1680:33;;;;;;;;;;;;;;;;;;;;;;;1633:90;;;;;;;-1:-1:-1;;;;;1633:90:1;;;;;;;;;;;;;;;;;;-1:-1:-1;1773:8:1;;1771:1;;-1:-1:-1;;1773:12:1;;;1771:15;;;;;;;;;;1885:8;;-1:-1:-1;;1881:16:1;1910:17;;;-1:-1:-1;1771:15:1;;;;;;;1520:446::o;10243:921::-;10371:10;10524:4;10517;10511:3;10505:10;10501:21;10497:32;10654:3;10640:12;10636:22;10620:38;;10785:1;10771:356;10794:12;10791:1;10788:19;10771:356;;;10880:4;10873:12;;10864:22;;;10858:29;10925:22;;;10919:29;10974:20;;;;-1:-1:-1;10974:20:1;11011:2;;11083:12;11078:17;;11011:2;-1:-1:-1;;10821:1:1;10814:9;10771:356;;;-1:-1:-1;;10243:921:1;;;;:::o;11410:578::-;11559:13;;11687:11;;11725:48;;;;;;;;;;;;;;;;;;;;;;;;;11687:24;-1:-1:-1;11687:24:1;11666:117;;;;-1:-1:-1;;;;;11666:117:1;;;;;;;;;;;11793:188;11814:19;11828:4;11814:13;:19::i;:::-;11836:2;11814:24;11887:21;11901:6;11887:13;:21::i;:::-;11911:2;11887:26;11962:9;11793:7;:188::i;:::-;11410:578;;;:::o;8352:784::-;8471:19;8545:25;8573:21;8585:1;8588:5;8573:11;:21::i;:::-;8545:49;;8613:2;8604:11;;;;8749:17;8741:5;:25;8729:1;:8;:37;;8780:48;;;;;;;;;;;;;;;;;;;;;;;8708:130;;;;;;;-1:-1:-1;;;;;8708:130:1;;;;;;;;;;;8920:17;8910:28;;;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;8910:28:1;;8901:37;;8948:157;8969:21;8983:6;8969:13;:21::i;:::-;8993:2;8969:26;9054:5;9035:16;9049:1;9035:13;:16::i;:::-;:24;9062:2;9035:29;9078:17;8948:7;:157::i;:::-;8352:784;;;;;:::o;3976:1427::-;4151:5;4159:2;4151:10;4139:1;:8;:22;;4203:38;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4203:38:1;;;4118:133;;;;;;;-1:-1:-1;;;;;4118:133:1;;;;;;;;;;-1:-1:-1;5187:13:1;;4498:2;5187:13;5181:20;;-1:-1:-1;;5177:93:1;5365:21;;;;5343:44;;4563:834::o;7848:306::-;7931:13;7993:1;7981;:8;:13;;8008:37;;;;;;;;;;;;;;;;;;;;;;;7960:95;;;;;;;-1:-1:-1;;;;;7960:95:1;;;;;;;;;;-1:-1:-1;;8111:2:1;8104:10;8098:17;;7848:306::o;9352:678::-;9649:5;:12;9605:5;9613:2;9605:10;:56;9593:1;:8;:68;;9675:48;;;;;;;;;;;;;;;;;;;;;;;9572:161;;;;;;;-1:-1:-1;;;;;9572:161:1;;;;;;;;;;;9777:246;9822:5;9798:16;9812:1;9798:13;:16::i;:::-;9817:2;9798:21;:29;9871:20;9885:5;9871:13;:20::i;:::-;9945:5;:12;9960:2;9945:17;9777:7;:246::i;2855:884::-;2976:14;3039:5;3047:2;3039:10;3027:1;:8;:22;;3091:38;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3091:38:1;;;3006:133;;;;;;;-1:-1:-1;;;;;3006:133:1;;;;;;;;;;-1:-1:-1;;3641:13:1;3386:2;3641:13;3635:20;3657:42;3631:69;;2855:884::o;6363:454::-;6538:5;6546:2;6538:10;6526:1;:8;:22;;6562:38;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6562:38:1;;;6505:105;;;;;;;-1:-1:-1;;;;;6505:105:1;;;;;;;;;;-1:-1:-1;6780:13:1;;6691:2;6780:13;6773:28;6759:52::o;2161:480::-;2248:14;2311:2;2299:1;:8;:14;;2327:38;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2327:38:1;;;2278:97;;;;;;;-1:-1:-1;;;;;2278:97:1;;;;;;;;;;;2427:29;2439:1;2453:2;2442:1;:8;:13;2427:11;:29::i;:::-;2559:8;;-1:-1:-1;;2555:17:1;2585;;;-1:-1:-1;2418:38:1;2161:480::o;7484:187::-;7626:38;7639:1;7642:5;7657;7626:12;:38::i;5639:488::-;5760:14;5823:5;5831:2;5823:10;5811:1;:8;:22;;5847:38;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5847:38:1;;;5790:105;;;;;;;-1:-1:-1;;;;;5790:105:1;;;;;;;;;;-1:-1:-1;;6074:13:1;5976:2;6074:13;6068:20;;5639:488::o;787:218:2:-;954:5;787:218::o;1244:4207::-;1394:2;1385:6;:11;1381:4064;;;1683:1;1673:6;1669:2;1665:15;1660:3;1656:25;1652:33;1734:4;1730:9;1721:6;1715:13;1711:29;1783:4;1776;1770:11;1766:22;1824:1;1821;1818:8;1812:4;1805:22;1622:219;;;;;;1945:4;1935:6;:14;1931:59;;;1969:7;;1931:59;2679:4;2670:6;:13;2666:2769;;;3005:2;2997:6;2993:15;2983:25;;3053:6;3045;3041:19;3103:6;3097:4;3093:17;3410:4;3404:11;3613:198;3631:4;3623:6;3620:16;3613:198;;;3679:13;;3666:27;;3740:2;3776:13;;;;3728:15;;;;3613:198;;;3900:18;;-1:-1:-1;2712:1224:2;;;4181:2;4173:6;4169:15;4159:25;;4229:6;4221;4217:19;4279:6;4273:4;4269:17;4589:6;4583:13;5103:191;5120:4;5114;5110:15;5103:191;;;5168:11;;5155:25;;-1:-1:-1;;5213:13:2;;;;5259;;;;5103:191;;;5384:19;;-1:-1:-1;;1244:4207:2;;;:::o;5:118:-1:-;;72:46;110:6;97:20;72:46;;130:118;;197:46;235:6;222:20;197:46;;256:440;;350:4;338:17;;334:27;-1:-1;324:2;;375:1;372;365:12;324:2;412:6;399:20;434:64;449:48;490:6;449:48;;;434:64;;;425:73;;518:6;511:5;504:21;554:4;546:6;542:17;587:4;580:5;576:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;649:41;683:6;678:3;673;649:41;;;317:379;;;;;;;;829:345;;942:2;930:9;921:7;917:23;913:32;910:2;;;958:1;955;948:12;910:2;993:31;;1044:18;1033:30;;1030:2;;;1076:1;1073;1066:12;1030:2;1096:62;1150:7;1141:6;1130:9;1126:22;1096:62;;;1086:72;904:270;-1:-1;;;;904:270;1181:574;;;1320:2;1308:9;1299:7;1295:23;1291:32;1288:2;;;1336:1;1333;1326:12;1288:2;1371:31;;1422:18;1411:30;;1408:2;;;1454:1;1451;1444:12;1408:2;1474:62;1528:7;1519:6;1508:9;1504:22;1474:62;;;1464:72;;1350:192;1601:2;1590:9;1586:18;1573:32;1625:18;1617:6;1614:30;1611:2;;;1657:1;1654;1647:12;1611:2;1677:62;1731:7;1722:6;1711:9;1707:22;1677:62;;;1667:72;;1552:193;1282:473;;;;;;1762:470;;;1892:2;1880:9;1871:7;1867:23;1863:32;1860:2;;;1908:1;1905;1898:12;1860:2;1943:31;;1994:18;1983:30;;1980:2;;;2026:1;2023;2016:12;1980:2;2046:62;2100:7;2091:6;2080:9;2076:22;2046:62;;;2036:72;;1922:192;2145:2;2163:53;2208:7;2199:6;2188:9;2184:22;2163:53;;2239:595;;;;2386:2;2374:9;2365:7;2361:23;2357:32;2354:2;;;2402:1;2399;2392:12;2354:2;2437:31;;2488:18;2477:30;;2474:2;;;2520:1;2517;2510:12;2474:2;2540:62;2594:7;2585:6;2574:9;2570:22;2540:62;;;2530:72;;2416:192;2639:2;2657:53;2702:7;2693:6;2682:9;2678:22;2657:53;;;2647:63;;2618:98;2747:2;2765:53;2810:7;2801:6;2790:9;2786:22;2765:53;;;2755:63;;2726:98;2348:486;;;;;;2841:595;;;;2988:2;2976:9;2967:7;2963:23;2959:32;2956:2;;;3004:1;3001;2994:12;2956:2;3039:31;;3090:18;3079:30;;3076:2;;;3122:1;3119;3112:12;3076:2;3142:62;3196:7;3187:6;3176:9;3172:22;3142:62;;;3132:72;;3018:192;3241:2;3259:53;3304:7;3295:6;3284:9;3280:22;3259:53;;;3249:63;;3220:98;3349:2;3367:53;3412:7;3403:6;3392:9;3388:22;3367:53;;3443:699;;;;3599:2;3587:9;3578:7;3574:23;3570:32;3567:2;;;3615:1;3612;3605:12;3567:2;3650:31;;3701:18;3690:30;;3687:2;;;3733:1;3730;3723:12;3687:2;3753:62;3807:7;3798:6;3787:9;3783:22;3753:62;;;3743:72;;3629:192;3852:2;3870:53;3915:7;3906:6;3895:9;3891:22;3870:53;;;3860:63;;3831:98;3988:2;3977:9;3973:18;3960:32;4012:18;4004:6;4001:30;3998:2;;;4044:1;4041;4034:12;3998:2;4064:62;4118:7;4109:6;4098:9;4094:22;4064:62;;4751:110;4824:31;4849:5;4824:31;;;4819:3;4812:44;4806:55;;;4868:101;4935:28;4957:5;4935:28;;4976:107;5047:30;5071:5;5047:30;;5090:110;5163:31;5188:5;5163:31;;5207:107;5278:30;5302:5;5278:30;;5321:297;;5421:38;5453:5;5421:38;;;5476:6;5471:3;5464:19;5488:63;5544:6;5537:4;5532:3;5528:14;5521:4;5514:5;5510:16;5488:63;;;5583:29;5605:6;5583:29;;;5563:50;;;5576:4;5563:50;;5401:217;-1:-1;;;5401:217;6041:193;6149:2;6134:18;;6163:61;6138:9;6197:6;6163:61;;6241:181;6343:2;6328:18;;6357:55;6332:9;6385:6;6357:55;;6429:193;6537:2;6522:18;;6551:61;6526:9;6585:6;6551:61;;6629:189;6735:2;6720:18;;6749:59;6724:9;6781:6;6749:59;;6825:277;6951:2;6965:47;;;6936:18;;7026:66;6936:18;7078:6;7026:66;;7109:378;7263:2;7277:47;;;7248:18;;7338:66;7248:18;7390:6;7338:66;;;7330:74;;7415:62;7473:2;7462:9;7458:18;7449:6;7415:62;;7494:374;7646:2;7660:47;;;7631:18;;7721:66;7631:18;7773:6;7721:66;;;7713:74;;7798:60;7854:2;7843:9;7839:18;7830:6;7798:60;;8355:256;8417:2;8411:9;8443:17;;;8518:18;8503:34;;8539:22;;;8500:62;8497:2;;;8575:1;8572;8565:12;8497:2;8591;8584:22;8395:216;;-1:-1;8395:216;8618:258;;8761:18;8753:6;8750:30;8747:2;;;8793:1;8790;8783:12;8747:2;-1:-1;8866:4;8837;8814:17;;;;-1:-1;;8810:33;8856:15;;8684:192;8883:91;8957:12;;8941:33;9076:128;9156:42;9145:54;;9128:76;9211:92;9284:13;9277:21;;9260:43;9310:151;9389:66;9378:78;;9361:100;9554:151;9633:66;9622:78;;9605:100;10106:145;10187:6;10182:3;10177;10164:30;-1:-1;10243:1;10225:16;;10218:27;10157:94;10260:268;10325:1;10332:101;10346:6;10343:1;10340:13;10332:101;;;10413:11;;;10407:18;10394:11;;;10387:39;10368:2;10361:10;10332:101;;;10448:6;10445:1;10442:13;10439:2;;;10513:1;10504:6;10499:3;10495:16;10488:27;10439:2;10309:219;;;;;10536:97;10624:2;10604:14;-1:-1;;10600:28;;10584:49" + "object": "0x6080604052600436106100da5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630301d5e181146100df578063076eec081461011657806318c535d9146101435780633f2a25ec146101635780634b3687681461018357806378bbae9b146101a357806382e2fa24146101c357806384f87758146101f0578063a4b1965414610210578063b1840e8d1461023e578063b79650a41461026b578063be766f1b1461028b578063cc12cb28146102b8578063e3a85ce4146102e5578063f06f300d14610305575b600080fd5b3480156100eb57600080fd5b506100ff6100fa366004610b57565b610325565b60405161010d9291906110c1565b60405180910390f35b34801561012257600080fd5b50610136610131366004610bfd565b610339565b60405161010d9190611090565b34801561014f57600080fd5b5061013661015e366004610b94565b610354565b34801561016f57600080fd5b5061013661017e366004610c44565b610367565b34801561018f57600080fd5b5061013661019e366004610d02565b610384565b3480156101af57600080fd5b506101366101be366004610d74565b610397565b3480156101cf57600080fd5b506101e36101de366004610bfd565b6103e1565b60405161010d9190611058565b3480156101fc57600080fd5b5061013661020b366004610ca8565b6103f3565b34801561021c57600080fd5b5061023061022b366004610b57565b610406565b60405161010d9291906110a1565b34801561024a57600080fd5b5061025e610259366004610b94565b610413565b60405161010d9190611066565b34801561027757600080fd5b50610136610286366004610ca8565b610439565b34801561029757600080fd5b506102ab6102a6366004610bfd565b61044c565b60405161010d9190611074565b3480156102c457600080fd5b506102d86102d3366004610bfd565b61045e565b60405161010d9190611082565b3480156102f157600080fd5b506102ab610300366004610bfd565b610470565b34801561031157600080fd5b5061025e610320366004610b94565b610482565b6060600061033283610494565b9293915050565b606061034b838363ffffffff61056116565b90505b92915050565b606061036083836105bc565b5090919050565b606061037a84848463ffffffff61061916565b50825b9392505050565b606061037a84848463ffffffff6106a216565b606060008551838501111515156103ad57600080fd5b855185840111156103bd57600080fd5b6103c686610706565b90506103d78582018583018561070c565b5093949350505050565b600061034b838363ffffffff6107cf16565b606061037a84848463ffffffff61083016565b6060600061033283610876565b600061041e83610494565b5061042882610494565b5061034b838363ffffffff6108ef16565b606061037a84848463ffffffff610a1916565b600061034b838363ffffffff610a2416565b600061034b838363ffffffff610a6f16565b600061034b838363ffffffff610adc16565b600061034b838363ffffffff6108ef16565b60008082511115156104db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d290611101565b60405180910390fd5b815182907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061050b57fe5b016020015182517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01909252507f0100000000000000000000000000000000000000000000000000000000000000908190040290565b6060600061056f8484610adc565b90506020830192508083018451101515156105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d2906110e1565b50500190565b805182518111156105f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d290611111565b61061461060584610706565b61060e84610706565b8361070c565b505050565b8251601483011115610657576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d290611121565b6014919092010180517fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091189052565b805182602001018351101515156106e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d2906110e1565b610614826106f285610706565b016106fc83610ae8565b835160200161070c565b60200190565b6020811015610736576001816020036101000a038019835116818551168082178652505050610614565b8282141561074357610614565b8282111561077d5760208103905080820181840181515b8285101561077557845186526020958601959094019361075a565b905250610614565b60208103905080820181840183515b818612156107c657825182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0928301929091019061078c565b85525050505050565b600081601401835110151515610811576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d290611121565b50016014015173ffffffffffffffffffffffffffffffffffffffff1690565b825160208301111561086e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d2906110f1565b910160200152565b600060148251101515156108b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d290611121565b6108c48260148451036107cf565b82517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec019092525090565b60008151835114801561034b5750816040518082805190602001908083835b6020831061094b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161090e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052604051919093018190038120885190955088945090928392508401908083835b602083106109e057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109a3565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902060001916149392505050565b610614838383610830565b600081602001835110151515610a66576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d2906110f1565b50016020015190565b600081600401835110151515610ab1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d290611131565b5050602001517fffffffff000000000000000000000000000000000000000000000000000000001690565b600061034b8383610a24565b90565b600061034b82356111b2565b600061034b8235610ae8565b6000601f82018313610b1457600080fd5b8135610b27610b2282611168565b611141565b91508082526020830160208301858383011115610b4357600080fd5b610b4e83828461121a565b50505092915050565b600060208284031215610b6957600080fd5b813567ffffffffffffffff811115610b8057600080fd5b610b8c84828501610b03565b949350505050565b60008060408385031215610ba757600080fd5b823567ffffffffffffffff811115610bbe57600080fd5b610bca85828601610b03565b925050602083013567ffffffffffffffff811115610be757600080fd5b610bf385828601610b03565b9150509250929050565b60008060408385031215610c1057600080fd5b823567ffffffffffffffff811115610c2757600080fd5b610c3385828601610b03565b9250506020610bf385828601610af7565b600080600060608486031215610c5957600080fd5b833567ffffffffffffffff811115610c7057600080fd5b610c7c86828701610b03565b9350506020610c8d86828701610af7565b9250506040610c9e86828701610aeb565b9150509250925092565b600080600060608486031215610cbd57600080fd5b833567ffffffffffffffff811115610cd457600080fd5b610ce086828701610b03565b9350506020610cf186828701610af7565b9250506040610c9e86828701610af7565b600080600060608486031215610d1757600080fd5b833567ffffffffffffffff811115610d2e57600080fd5b610d3a86828701610b03565b9350506020610d4b86828701610af7565b925050604084013567ffffffffffffffff811115610d6857600080fd5b610c9e86828701610b03565b60008060008060808587031215610d8a57600080fd5b843567ffffffffffffffff811115610da157600080fd5b610dad87828801610b03565b9450506020610dbe87828801610af7565b9350506040610dcf87828801610af7565b9250506060610de087828801610af7565b91505092959194509250565b610df5816111b2565b82525050565b610df5816111cb565b610df5816111d0565b610df581610ae8565b610df5816111f5565b6000610e2a826111ae565b808452610e3e816020860160208601611226565b610e4781611256565b9093016020019392505050565b603081527f475245415445525f4f525f455155414c5f544f5f4e45535445445f425954455360208201527f5f4c454e4754485f524551554952454400000000000000000000000000000000604082015260600190565b602681527f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f524560208201527f5155495245440000000000000000000000000000000000000000000000000000604082015260600190565b602181527f475245415445525f5448414e5f5a45524f5f4c454e4754485f5245515549524560208201527f4400000000000000000000000000000000000000000000000000000000000000604082015260600190565b603081527f475245415445525f4f525f455155414c5f544f5f534f555243455f425954455360208201527f5f4c454e4754485f524551554952454400000000000000000000000000000000604082015260600190565b602681527f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524560208201527f5155495245440000000000000000000000000000000000000000000000000000604082015260600190565b602581527f475245415445525f4f525f455155414c5f544f5f345f4c454e4754485f52455160208201527f5549524544000000000000000000000000000000000000000000000000000000604082015260600190565b6020810161034e8284610dec565b6020810161034e8284610dfb565b6020810161034e8284610e0d565b6020810161034e8284610e16565b6020808252810161034b8184610e1f565b604080825281016110b28185610e1f565b905061037d6020830184610dec565b604080825281016110d28185610e1f565b905061037d6020830184610e04565b6020808252810161034e81610e54565b6020808252810161034e81610eaa565b6020808252810161034e81610f00565b6020808252810161034e81610f56565b6020808252810161034e81610fac565b6020808252810161034e81611002565b60405181810167ffffffffffffffff8111828210171561116057600080fd5b604052919050565b600067ffffffffffffffff82111561117f57600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b151590565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b82818337506000910152565b60005b83811015611241578181015183820152602001611229565b83811115611250576000848401525b50505050565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a72305820a09f1c20c853f86425fa5b7abe0ba016f056cece7e075e7a528a56c0fe4205ed6c6578706572696d656e74616cf50037", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xDA JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x301D5E1 DUP2 EQ PUSH2 0xDF JUMPI DUP1 PUSH4 0x76EEC08 EQ PUSH2 0x116 JUMPI DUP1 PUSH4 0x18C535D9 EQ PUSH2 0x143 JUMPI DUP1 PUSH4 0x3F2A25EC EQ PUSH2 0x163 JUMPI DUP1 PUSH4 0x4B368768 EQ PUSH2 0x183 JUMPI DUP1 PUSH4 0x78BBAE9B EQ PUSH2 0x1A3 JUMPI DUP1 PUSH4 0x82E2FA24 EQ PUSH2 0x1C3 JUMPI DUP1 PUSH4 0x84F87758 EQ PUSH2 0x1F0 JUMPI DUP1 PUSH4 0xA4B19654 EQ PUSH2 0x210 JUMPI DUP1 PUSH4 0xB1840E8D EQ PUSH2 0x23E JUMPI DUP1 PUSH4 0xB79650A4 EQ PUSH2 0x26B JUMPI DUP1 PUSH4 0xBE766F1B EQ PUSH2 0x28B JUMPI DUP1 PUSH4 0xCC12CB28 EQ PUSH2 0x2B8 JUMPI DUP1 PUSH4 0xE3A85CE4 EQ PUSH2 0x2E5 JUMPI DUP1 PUSH4 0xF06F300D EQ PUSH2 0x305 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0xFA CALLDATASIZE PUSH1 0x4 PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x325 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10D SWAP3 SWAP2 SWAP1 PUSH2 0x10C1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x122 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x131 CALLDATASIZE PUSH1 0x4 PUSH2 0xBFD JUMP JUMPDEST PUSH2 0x339 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10D SWAP2 SWAP1 PUSH2 0x1090 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x15E CALLDATASIZE PUSH1 0x4 PUSH2 0xB94 JUMP JUMPDEST PUSH2 0x354 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x16F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x17E CALLDATASIZE PUSH1 0x4 PUSH2 0xC44 JUMP JUMPDEST PUSH2 0x367 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x19E CALLDATASIZE PUSH1 0x4 PUSH2 0xD02 JUMP JUMPDEST PUSH2 0x384 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x1BE CALLDATASIZE PUSH1 0x4 PUSH2 0xD74 JUMP JUMPDEST PUSH2 0x397 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E3 PUSH2 0x1DE CALLDATASIZE PUSH1 0x4 PUSH2 0xBFD JUMP JUMPDEST PUSH2 0x3E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10D SWAP2 SWAP1 PUSH2 0x1058 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0xCA8 JUMP JUMPDEST PUSH2 0x3F3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x230 PUSH2 0x22B CALLDATASIZE PUSH1 0x4 PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x406 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10D SWAP3 SWAP2 SWAP1 PUSH2 0x10A1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x24A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25E PUSH2 0x259 CALLDATASIZE PUSH1 0x4 PUSH2 0xB94 JUMP JUMPDEST PUSH2 0x413 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10D SWAP2 SWAP1 PUSH2 0x1066 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x277 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x286 CALLDATASIZE PUSH1 0x4 PUSH2 0xCA8 JUMP JUMPDEST PUSH2 0x439 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x297 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AB PUSH2 0x2A6 CALLDATASIZE PUSH1 0x4 PUSH2 0xBFD JUMP JUMPDEST PUSH2 0x44C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10D SWAP2 SWAP1 PUSH2 0x1074 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D8 PUSH2 0x2D3 CALLDATASIZE PUSH1 0x4 PUSH2 0xBFD JUMP JUMPDEST PUSH2 0x45E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10D SWAP2 SWAP1 PUSH2 0x1082 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AB PUSH2 0x300 CALLDATASIZE PUSH1 0x4 PUSH2 0xBFD JUMP JUMPDEST PUSH2 0x470 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x311 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25E PUSH2 0x320 CALLDATASIZE PUSH1 0x4 PUSH2 0xB94 JUMP JUMPDEST PUSH2 0x482 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x332 DUP4 PUSH2 0x494 JUMP JUMPDEST SWAP3 SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x34B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x561 AND JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x360 DUP4 DUP4 PUSH2 0x5BC JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x37A DUP5 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x619 AND JUMP JUMPDEST POP DUP3 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x37A DUP5 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x6A2 AND JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP6 MLOAD DUP4 DUP6 ADD GT ISZERO ISZERO ISZERO PUSH2 0x3AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 MLOAD DUP6 DUP5 ADD GT ISZERO PUSH2 0x3BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3C6 DUP7 PUSH2 0x706 JUMP JUMPDEST SWAP1 POP PUSH2 0x3D7 DUP6 DUP3 ADD DUP6 DUP4 ADD DUP6 PUSH2 0x70C JUMP JUMPDEST POP SWAP4 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x7CF AND JUMP JUMPDEST PUSH1 0x60 PUSH2 0x37A DUP5 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x830 AND JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x332 DUP4 PUSH2 0x876 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x41E DUP4 PUSH2 0x494 JUMP JUMPDEST POP PUSH2 0x428 DUP3 PUSH2 0x494 JUMP JUMPDEST POP PUSH2 0x34B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x8EF AND JUMP JUMPDEST PUSH1 0x60 PUSH2 0x37A DUP5 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0xA19 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0xA24 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0xA6F AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0xADC AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x8EF AND JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT ISZERO ISZERO PUSH2 0x4DB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x1101 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP3 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x50B JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD DUP3 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP3 MSTORE POP PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV MUL SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x56F DUP5 DUP5 PUSH2 0xADC JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP4 ADD SWAP3 POP DUP1 DUP4 ADD DUP5 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x5B6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x10E1 JUMP JUMPDEST POP POP ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 MLOAD DUP2 GT ISZERO PUSH2 0x5F9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x1111 JUMP JUMPDEST PUSH2 0x614 PUSH2 0x605 DUP5 PUSH2 0x706 JUMP JUMPDEST PUSH2 0x60E DUP5 PUSH2 0x706 JUMP JUMPDEST DUP4 PUSH2 0x70C JUMP JUMPDEST POP POP POP JUMP JUMPDEST DUP3 MLOAD PUSH1 0x14 DUP4 ADD GT ISZERO PUSH2 0x657 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x1121 JUMP JUMPDEST PUSH1 0x14 SWAP2 SWAP1 SWAP3 ADD ADD DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 XOR SWAP1 MSTORE JUMP JUMPDEST DUP1 MLOAD DUP3 PUSH1 0x20 ADD ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x6E5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x10E1 JUMP JUMPDEST PUSH2 0x614 DUP3 PUSH2 0x6F2 DUP6 PUSH2 0x706 JUMP JUMPDEST ADD PUSH2 0x6FC DUP4 PUSH2 0xAE8 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x20 ADD PUSH2 0x70C JUMP JUMPDEST PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x736 JUMPI PUSH1 0x1 DUP2 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP4 MLOAD AND DUP2 DUP6 MLOAD AND DUP1 DUP3 OR DUP7 MSTORE POP POP POP PUSH2 0x614 JUMP JUMPDEST DUP3 DUP3 EQ ISZERO PUSH2 0x743 JUMPI PUSH2 0x614 JUMP JUMPDEST DUP3 DUP3 GT ISZERO PUSH2 0x77D JUMPI PUSH1 0x20 DUP2 SUB SWAP1 POP DUP1 DUP3 ADD DUP2 DUP5 ADD DUP2 MLOAD JUMPDEST DUP3 DUP6 LT ISZERO PUSH2 0x775 JUMPI DUP5 MLOAD DUP7 MSTORE PUSH1 0x20 SWAP6 DUP7 ADD SWAP6 SWAP1 SWAP5 ADD SWAP4 PUSH2 0x75A JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x614 JUMP JUMPDEST PUSH1 0x20 DUP2 SUB SWAP1 POP DUP1 DUP3 ADD DUP2 DUP5 ADD DUP4 MLOAD JUMPDEST DUP2 DUP7 SLT ISZERO PUSH2 0x7C6 JUMPI DUP3 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x78C JUMP JUMPDEST DUP6 MSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x811 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x1121 JUMP JUMPDEST POP ADD PUSH1 0x14 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP4 ADD GT ISZERO PUSH2 0x86E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x10F1 JUMP JUMPDEST SWAP2 ADD PUSH1 0x20 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x14 DUP3 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x8B6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x1121 JUMP JUMPDEST PUSH2 0x8C4 DUP3 PUSH1 0x14 DUP5 MLOAD SUB PUSH2 0x7CF JUMP JUMPDEST DUP3 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC ADD SWAP1 SWAP3 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP4 MLOAD EQ DUP1 ISZERO PUSH2 0x34B JUMPI POP DUP2 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x94B JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x90E JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 DUP9 MLOAD SWAP1 SWAP6 POP DUP9 SWAP5 POP SWAP1 SWAP3 DUP4 SWAP3 POP DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x9E0 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x9A3 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 PUSH1 0x0 NOT AND EQ SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x614 DUP4 DUP4 DUP4 PUSH2 0x830 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0xA66 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x10F1 JUMP JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0xAB1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x1131 JUMP JUMPDEST POP POP PUSH1 0x20 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP4 DUP4 PUSH2 0xA24 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP3 CALLDATALOAD PUSH2 0x11B2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP3 CALLDATALOAD PUSH2 0xAE8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0xB14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xB27 PUSH2 0xB22 DUP3 PUSH2 0x1168 JUMP JUMPDEST PUSH2 0x1141 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0xB43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB4E DUP4 DUP3 DUP5 PUSH2 0x121A JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB8C DUP5 DUP3 DUP6 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xBA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBCA DUP6 DUP3 DUP7 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBF3 DUP6 DUP3 DUP7 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xC10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xC27 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC33 DUP6 DUP3 DUP7 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0xBF3 DUP6 DUP3 DUP7 ADD PUSH2 0xAF7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xC59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xC70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC7C DUP7 DUP3 DUP8 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xC8D DUP7 DUP3 DUP8 ADD PUSH2 0xAF7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0xC9E DUP7 DUP3 DUP8 ADD PUSH2 0xAEB JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xCBD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xCD4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xCE0 DUP7 DUP3 DUP8 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xCF1 DUP7 DUP3 DUP8 ADD PUSH2 0xAF7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0xC9E DUP7 DUP3 DUP8 ADD PUSH2 0xAF7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xD17 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xD2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD3A DUP7 DUP3 DUP8 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xD4B DUP7 DUP3 DUP8 ADD PUSH2 0xAF7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xD68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC9E DUP7 DUP3 DUP8 ADD PUSH2 0xB03 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xD8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xDA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDAD DUP8 DUP3 DUP9 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0xDBE DUP8 DUP3 DUP9 ADD PUSH2 0xAF7 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0xDCF DUP8 DUP3 DUP9 ADD PUSH2 0xAF7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0xDE0 DUP8 DUP3 DUP9 ADD PUSH2 0xAF7 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH2 0xDF5 DUP2 PUSH2 0x11B2 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0xDF5 DUP2 PUSH2 0x11CB JUMP JUMPDEST PUSH2 0xDF5 DUP2 PUSH2 0x11D0 JUMP JUMPDEST PUSH2 0xDF5 DUP2 PUSH2 0xAE8 JUMP JUMPDEST PUSH2 0xDF5 DUP2 PUSH2 0x11F5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE2A DUP3 PUSH2 0x11AE JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0xE3E DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1226 JUMP JUMPDEST PUSH2 0xE47 DUP2 PUSH2 0x1256 JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x30 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F4E45535445445F4259544553 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5F4C454E4754485F524551554952454400000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F33325F4C454E4754485F5245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x21 DUP2 MSTORE PUSH32 0x475245415445525F5448414E5F5A45524F5F4C454E4754485F52455155495245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x4400000000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x30 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F534F555243455F4259544553 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5F4C454E4754485F524551554952454400000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F345F4C454E4754485F524551 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5549524544000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x34E DUP3 DUP5 PUSH2 0xDEC JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x34E DUP3 DUP5 PUSH2 0xDFB JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x34E DUP3 DUP5 PUSH2 0xE0D JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x34E DUP3 DUP5 PUSH2 0xE16 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x34B DUP2 DUP5 PUSH2 0xE1F JUMP JUMPDEST PUSH1 0x40 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10B2 DUP2 DUP6 PUSH2 0xE1F JUMP JUMPDEST SWAP1 POP PUSH2 0x37D PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xDEC JUMP JUMPDEST PUSH1 0x40 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10D2 DUP2 DUP6 PUSH2 0xE1F JUMP JUMPDEST SWAP1 POP PUSH2 0x37D PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xE04 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x34E DUP2 PUSH2 0xE54 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x34E DUP2 PUSH2 0xEAA JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x34E DUP2 PUSH2 0xF00 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x34E DUP2 PUSH2 0xF56 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x34E DUP2 PUSH2 0xFAC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x34E DUP2 PUSH2 0x1002 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1160 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x117F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1241 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1229 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1250 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 LOG0 SWAP16 SHR KECCAK256 0xc8 MSTORE8 0xf8 PUSH5 0x25FA5B7ABE SIGNEXTEND LOG0 AND CREATE JUMP 0xce 0xce PUSH31 0x75E7A528A56C0FE4205ED6C6578706572696D656E74616CF5003700000000 ", + "sourceMap": "685:7079:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;923:190;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;923:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;6000:235;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6000:235:0;;;;;;;;;;;;;;;;;2394:228;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2394:228:0;;;;;;;;;3287:230;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3287:230:0;;;;;;;;;6494:251;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6494:251:0;;;;;;;;;7114:648;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7114:648:0;;;;;;;;;2836:214;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2836:214:0;;;;;;;;;;;;;;;;;4203:230;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4203:230:0;;;;;;;;;1308:197;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1308:197:0;;;;;;;;;;;;;;;;;;1909:239;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1909:239:0;;;;;;;;;;;;;;;;;5119:230;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5119:230:0;;;;;;;;;3753:214;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3753:214:0;;;;;;;;;;;;;;;;;5591:211;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5591:211:0;;;;;;;;;;;;;;;;;4669:214;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4669:214:0;;;;;;;;;1718:181;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1718:181:0;;;;;;;;;923:190;1011:5;1025:13;1063:15;:1;:13;:15::i;:::-;1096:1;;923:190;-1:-1:-1;;923:190:0:o;6000:235::-;6133:19;6177:28;:1;6199:5;6177:28;:21;:28;:::i;:::-;6168:37;-1:-1:-1;6000:235:0;;;;;:::o;2394:228::-;2530:5;2558:36;2581:4;2587:6;2558:22;:36::i;:::-;-1:-1:-1;2611:4:0;;2394:228;-1:-1:-1;2394:228:0:o;3287:230::-;3436:5;3464:28;:1;3479:5;3486;3464:28;:14;:28;:::i;:::-;-1:-1:-1;3509:1:0;3287:230;;;;;;:::o;6494:251::-;6656:5;6684:36;:1;6707:5;6714;6684:36;:22;:36;:::i;7114:648::-;7315:5;7525:14;7415:3;:10;7405:6;7396;:15;:29;;7388:38;;;;;;;;7461:10;;7444:13;;;:27;;7436:36;;;;;;7542:20;:3;:18;:20::i;:::-;7525:37;;7635:56;7661:4;7652:6;:13;7676:6;7667;:15;7684:6;7635:16;:56::i;:::-;-1:-1:-1;7752:3:0;;7114:648;-1:-1:-1;;;;7114:648:0:o;2836:214::-;2961:14;3000:20;:1;3014:5;3000:20;:13;:20;:::i;4203:230::-;4352:5;4380:28;:1;4395:5;4402;4380:28;:14;:28;:::i;1308:197::-;1399:5;1413:14;1452:18;:1;:16;:18::i;1909:239::-;2016:10;2042:17;:3;:15;:17::i;:::-;;2069;:3;:15;:17::i;:::-;-1:-1:-1;2104:15:0;:3;2115;2104:15;:10;:15;:::i;5119:230::-;5268:5;5296:28;:1;5311:5;5318;5296:28;:14;:28;:::i;3753:214::-;3878:14;3917:20;:1;3931:5;3917:20;:13;:20;:::i;5591:211::-;5715:13;5753:19;:1;5766:5;5753:19;:12;:19;:::i;4669:214::-;4794:14;4833:20;:1;4847:5;4833:20;:13;:20;:::i;1718:181::-;1821:10;1855:15;:3;1866;1855:15;:10;:15;:::i;8118:448:1:-;8202:13;8263:1;8252;:8;:12;8231:92;;;;;;;;;;;;;;;;;;;;;;;;8373:8;;8371:1;;8373:12;;;;8371:15;;;;;;;;;;8485:8;;8481:16;;8510:17;;;-1:-1:-1;8371:15:1;;;;;;;8118:448::o;16204:672::-;16333:19;16407:25;16435:21;16447:1;16450:5;16435:11;:21::i;:::-;16407:49;;16475:2;16466:11;;;;16611:17;16603:5;:25;16591:1;:8;:37;;16570:132;;;;;;;;;;;;;;;;-1:-1:-1;;16824:13:1;;16204:672::o;17971:504::-;18120:13;;18248:11;;:24;-1:-1:-1;18248:24:1;18227:119;;;;;;;;;;;;;;18356:112;18377:21;:4;:19;:21::i;:::-;18412:23;:6;:21;:23::i;:::-;18449:9;18356:7;:112::i;:::-;17971:504;;;:::o;11196:1617::-;11359:8;;11379:2;11371:10;;-1:-1:-1;11359:22:1;11338:135;;;;;;;;;;;;;;11720:2;12409:13;;;;;12403:20;;12425:66;12399:93;12637:42;12626:54;;;12775:21;;;;12753:44;;11785:1022::o;17092:633::-;17399:5;:12;17355:5;17363:2;17355:10;:56;17343:1;:8;:68;;17322:163;;;;;;;;;;;;;;;;17529:189;17571:5;17550:18;:1;:16;:18::i;:::-;:26;17590:18;:5;:16;:18::i;:::-;17652:5;:12;17667:2;17652:17;17529:7;:189::i;1341:228::-;1520:2;1509:14;;1341:228::o;1808:4207::-;1958:2;1949:6;:11;1945:4064;;;2247:1;2237:6;2233:2;2229:15;2224:3;2220:25;2216:33;2298:4;2294:9;2285:6;2279:13;2275:29;2347:4;2340;2334:11;2330:22;2388:1;2385;2382:8;2376:4;2369:22;2186:219;;;;;;2509:4;2499:6;:14;2495:59;;;2533:7;;2495:59;3243:4;3234:6;:13;3230:2769;;;3569:2;3561:6;3557:15;3547:25;;3617:6;3609;3605:19;3667:6;3661:4;3657:17;3974:4;3968:11;4177:198;4195:4;4187:6;4184:16;4177:198;;;4243:13;;4230:27;;4304:2;4340:13;;;;4292:15;;;;4177:198;;;4464:18;;-1:-1:-1;3276:1224:1;;;4745:2;4737:6;4733:15;4723:25;;4793:6;4785;4781:19;4843:6;4837:4;4833:17;5153:6;5147:13;5667:191;5684:4;5678;5674:15;5667:191;;;5732:11;;5719:25;;5777:13;;;;;5823;;;;5667:191;;;5948:19;;-1:-1:-1;;1808:4207:1;;;:::o;10073:886::-;10194:14;10257:5;10265:2;10257:10;10245:1;:8;:22;;10224:135;;;;;;;;;;;;;;;;-1:-1:-1;10861:13:1;10606:2;10861:13;10855:20;10877:42;10851:69;;10073:886::o;13775:456::-;13938:8;;13958:2;13950:10;;-1:-1:-1;13938:22:1;13917:107;;;;;;;;;;;;;;14194:13;;14105:2;14194:13;14187:28;14173:52::o;8761:482::-;8848:14;8911:2;8899:1;:8;:14;;8878:99;;;;;;;;;;;;;;;;9029:29;9041:1;9055:2;9044:1;:8;:13;9029:11;:29::i;:::-;9161:8;;9157:17;;9187;;;-1:-1:-1;9020:38:1;8761:482::o;9456:403::-;9577:10;9806:3;:10;9792:3;:10;:24;:60;;;;;9848:3;9838:14;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;9838:14:1;;;;;;;;;;;9820;;9838;;-1:-1:-1;9820:14:1;;-1:-1:-1;9838:14:1;;;;-1:-1:-1;9820:14:1;;;;9838;9820;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;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;;;9820:14:1;;;;;;;;;;;;;;;;:32;;;;9785:67;9456:403;-1:-1:-1;;;9456:403:1:o;14898:187::-;15040:38;15053:1;15056:5;15071;15040:12;:38::i;13049:490::-;13170:14;13233:5;13241:2;13233:10;13221:1;:8;:22;;13200:107;;;;;;;;;;;;;;;;-1:-1:-1;13486:13:1;13388:2;13486:13;13480:20;;13049:490::o;15327:554::-;15442:13;15504:5;15512:1;15504:9;15492:1;:8;:21;;15471:105;;;;;;;;;;;;;;;;-1:-1:-1;;15632:2:1;15625:10;15619:17;15775:66;15763:79;;15327:554::o;14467:195::-;14588:14;14633:21;14645:1;14648:5;14633:11;:21::i;922:215::-;1086:5;922:215::o;5:118:-1:-;;72:46;110:6;97:20;72:46;;130:118;;197:46;235:6;222:20;197:46;;256:440;;350:4;338:17;;334:27;-1:-1;324:2;;375:1;372;365:12;324:2;412:6;399:20;434:64;449:48;490:6;449:48;;;434:64;;;425:73;;518:6;511:5;504:21;554:4;546:6;542:17;587:4;580:5;576:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;649:41;683:6;678:3;673;649:41;;;317:379;;;;;;;;829:345;;942:2;930:9;921:7;917:23;913:32;910:2;;;958:1;955;948:12;910:2;993:31;;1044:18;1033:30;;1030:2;;;1076:1;1073;1066:12;1030:2;1096:62;1150:7;1141:6;1130:9;1126:22;1096:62;;;1086:72;904:270;-1:-1;;;;904:270;1181:574;;;1320:2;1308:9;1299:7;1295:23;1291:32;1288:2;;;1336:1;1333;1326:12;1288:2;1371:31;;1422:18;1411:30;;1408:2;;;1454:1;1451;1444:12;1408:2;1474:62;1528:7;1519:6;1508:9;1504:22;1474:62;;;1464:72;;1350:192;1601:2;1590:9;1586:18;1573:32;1625:18;1617:6;1614:30;1611:2;;;1657:1;1654;1647:12;1611:2;1677:62;1731:7;1722:6;1711:9;1707:22;1677:62;;;1667:72;;1552:193;1282:473;;;;;;1762:470;;;1892:2;1880:9;1871:7;1867:23;1863:32;1860:2;;;1908:1;1905;1898:12;1860:2;1943:31;;1994:18;1983:30;;1980:2;;;2026:1;2023;2016:12;1980:2;2046:62;2100:7;2091:6;2080:9;2076:22;2046:62;;;2036:72;;1922:192;2145:2;2163:53;2208:7;2199:6;2188:9;2184:22;2163:53;;2239:595;;;;2386:2;2374:9;2365:7;2361:23;2357:32;2354:2;;;2402:1;2399;2392:12;2354:2;2437:31;;2488:18;2477:30;;2474:2;;;2520:1;2517;2510:12;2474:2;2540:62;2594:7;2585:6;2574:9;2570:22;2540:62;;;2530:72;;2416:192;2639:2;2657:53;2702:7;2693:6;2682:9;2678:22;2657:53;;;2647:63;;2618:98;2747:2;2765:53;2810:7;2801:6;2790:9;2786:22;2765:53;;;2755:63;;2726:98;2348:486;;;;;;2841:595;;;;2988:2;2976:9;2967:7;2963:23;2959:32;2956:2;;;3004:1;3001;2994:12;2956:2;3039:31;;3090:18;3079:30;;3076:2;;;3122:1;3119;3112:12;3076:2;3142:62;3196:7;3187:6;3176:9;3172:22;3142:62;;;3132:72;;3018:192;3241:2;3259:53;3304:7;3295:6;3284:9;3280:22;3259:53;;;3249:63;;3220:98;3349:2;3367:53;3412:7;3403:6;3392:9;3388:22;3367:53;;3443:699;;;;3599:2;3587:9;3578:7;3574:23;3570:32;3567:2;;;3615:1;3612;3605:12;3567:2;3650:31;;3701:18;3690:30;;3687:2;;;3733:1;3730;3723:12;3687:2;3753:62;3807:7;3798:6;3787:9;3783:22;3753:62;;;3743:72;;3629:192;3852:2;3870:53;3915:7;3906:6;3895:9;3891:22;3870:53;;;3860:63;;3831:98;3988:2;3977:9;3973:18;3960:32;4012:18;4004:6;4001:30;3998:2;;;4044:1;4041;4034:12;3998:2;4064:62;4118:7;4109:6;4098:9;4094:22;4064:62;;4751:721;;;;;4915:3;4903:9;4894:7;4890:23;4886:33;4883:2;;;4932:1;4929;4922:12;4883:2;4967:31;;5018:18;5007:30;;5004:2;;;5050:1;5047;5040:12;5004:2;5070:62;5124:7;5115:6;5104:9;5100:22;5070:62;;;5060:72;;4946:192;5169:2;5187:53;5232:7;5223:6;5212:9;5208:22;5187:53;;;5177:63;;5148:98;5277:2;5295:53;5340:7;5331:6;5320:9;5316:22;5295:53;;;5285:63;;5256:98;5385:2;5403:53;5448:7;5439:6;5428:9;5424:22;5403:53;;;5393:63;;5364:98;4877:595;;;;;;;;5479:110;5552:31;5577:5;5552:31;;;5547:3;5540:44;5534:55;;;5596:101;5663:28;5685:5;5663:28;;5704:107;5775:30;5799:5;5775:30;;5818:110;5891:31;5916:5;5891:31;;5935:107;6006:30;6030:5;6006:30;;6049:297;;6149:38;6181:5;6149:38;;;6204:6;6199:3;6192:19;6216:63;6272:6;6265:4;6260:3;6256:14;6249:4;6242:5;6238:16;6216:63;;;6311:29;6333:6;6311:29;;;6291:50;;;6304:4;6291:50;;6129:217;-1:-1;;;6129:217;6354:397;6509:2;6497:15;;6546:66;6541:2;6532:12;;6525:88;6647:66;6642:2;6633:12;;6626:88;6742:2;6733:12;;6490:261;6760:397;6915:2;6903:15;;6952:66;6947:2;6938:12;;6931:88;7053:66;7048:2;7039:12;;7032:88;7148:2;7139:12;;6896:261;7166:397;7321:2;7309:15;;7358:66;7353:2;7344:12;;7337:88;7459:66;7454:2;7445:12;;7438:88;7554:2;7545:12;;7302:261;7572:397;7727:2;7715:15;;7764:66;7759:2;7750:12;;7743:88;7865:66;7860:2;7851:12;;7844:88;7960:2;7951:12;;7708:261;7978:397;8133:2;8121:15;;8170:66;8165:2;8156:12;;8149:88;8271:66;8266:2;8257:12;;8250:88;8366:2;8357:12;;8114:261;8384:397;8539:2;8527:15;;8576:66;8571:2;8562:12;;8555:88;8677:66;8672:2;8663:12;;8656:88;8772:2;8763:12;;8520:261;8906:193;9014:2;8999:18;;9028:61;9003:9;9062:6;9028:61;;9106:181;9208:2;9193:18;;9222:55;9197:9;9250:6;9222:55;;9294:193;9402:2;9387:18;;9416:61;9391:9;9450:6;9416:61;;9494:189;9600:2;9585:18;;9614:59;9589:9;9646:6;9614:59;;9690:277;9816:2;9830:47;;;9801:18;;9891:66;9801:18;9943:6;9891:66;;9974:378;10128:2;10142:47;;;10113:18;;10203:66;10113:18;10255:6;10203:66;;;10195:74;;10280:62;10338:2;10327:9;10323:18;10314:6;10280:62;;10359:374;10511:2;10525:47;;;10496:18;;10586:66;10496:18;10638:6;10586:66;;;10578:74;;10663:60;10719:2;10708:9;10704:18;10695:6;10663:60;;10740:387;10921:2;10935:47;;;10906:18;;10996:121;10906:18;10996:121;;11134:387;11315:2;11329:47;;;11300:18;;11390:121;11300:18;11390:121;;11528:387;11709:2;11723:47;;;11694:18;;11784:121;11694:18;11784:121;;11922:387;12103:2;12117:47;;;12088:18;;12178:121;12088:18;12178:121;;12316:387;12497:2;12511:47;;;12482:18;;12572:121;12482:18;12572:121;;12710:387;12891:2;12905:47;;;12876:18;;12966:121;12876:18;12966:121;;13304:256;13366:2;13360:9;13392:17;;;13467:18;13452:34;;13488:22;;;13449:62;13446:2;;;13524:1;13521;13514:12;13446:2;13540;13533:22;13344:216;;-1:-1;13344:216;13567:258;;13710:18;13702:6;13699:30;13696:2;;;13742:1;13739;13732:12;13696:2;-1:-1;13815:4;13786;13763:17;;;;13782:9;13759:33;13805:15;;13633:192;13832:91;13906:12;;13890:33;13930:128;14010:42;13999:54;;13982:76;14065:92;14138:13;14131:21;;14114:43;14164:151;14243:66;14232:78;;14215:100;14408:151;14487:66;14476:78;;14459:100;14960:145;15041:6;15036:3;15031;15018:30;-1:-1;15097:1;15079:16;;15072:27;15011:94;15114:268;15179:1;15186:101;15200:6;15197:1;15194:13;15186:101;;;15267:11;;;15261:18;15248:11;;;15241:39;15222:2;15215:10;15186:101;;;15302:6;15299:1;15296:13;15293:2;;;15367:1;15358:6;15353:3;15349:16;15342:27;15293:2;15163:219;;;;;15390:97;15478:2;15458:14;15474:7;15454:28;;15438:49" } } }, @@ -336,24 +394,20 @@ }, "current/utils/LibBytes/LibBytes.sol": { "id": 1 - }, - "current/utils/LibMem/LibMem.sol": { - "id": 2 } }, "sourceCodes": { - "current/test/TestLibBytes/TestLibBytes.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 \"../../utils/LibBytes/LibBytes.sol\";\n\ncontract TestLibBytes is\n LibBytes\n{\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 publicPopLastByte(bytes memory b)\n public\n pure\n returns (bytes memory, bytes1 result)\n {\n result = popLastByte(b);\n return (b, 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 publicPopLast20Bytes(bytes memory b)\n public\n pure\n returns (bytes memory, address result)\n {\n result = popLast20Bytes(b);\n return (b, result);\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 publicAreBytesEqual(bytes memory lhs, bytes memory rhs)\n public\n pure\n returns (bool equal)\n {\n equal = areBytesEqual(lhs, rhs);\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 publicDeepCopyBytes(\n bytes memory dest,\n bytes memory source\n )\n public\n pure\n returns (bytes memory)\n {\n deepCopyBytes(dest, source);\n return dest;\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 publicReadAddress(\n bytes memory b,\n uint256 index\n )\n public\n pure\n returns (address result)\n {\n result = readAddress(b, index);\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 publicWriteAddress(\n bytes memory b,\n uint256 index,\n address input\n )\n public\n pure\n returns (bytes memory)\n {\n writeAddress(b, index, input);\n return b;\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 publicReadBytes32(\n bytes memory b,\n uint256 index\n )\n public\n pure\n returns (bytes32 result)\n {\n result = readBytes32(b, index);\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 into.\n /// @param index Index in byte array of .\n /// @param input bytes32 to put into byte array.\n function publicWriteBytes32(\n bytes memory b,\n uint256 index,\n bytes32 input\n )\n public\n pure\n returns (bytes memory)\n {\n writeBytes32(b, index, input);\n return b;\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 publicReadUint256(\n bytes memory b,\n uint256 index\n )\n public\n pure\n returns (uint256 result)\n {\n result = readUint256(b, index);\n return result;\n }\n\n /// @dev Writes a uint256 into a specific position in a byte array.\n /// @param b Byte array to insert into.\n /// @param index Index in byte array of .\n /// @param input uint256 to put into byte array.\n function publicWriteUint256(\n bytes memory b,\n uint256 index,\n uint256 input\n )\n public\n pure\n returns (bytes memory)\n {\n writeUint256(b, index, input);\n return b;\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 publicReadFirst4(bytes memory b)\n public\n pure\n returns (bytes4 result)\n {\n result = readFirst4(b);\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 publicReadBytes(\n bytes memory b,\n uint256 index\n )\n public\n pure\n returns (bytes memory result)\n {\n result = readBytes(b, index);\n return result;\n }\n\n /// @dev Inserts bytes at a specific position in a byte array.\n /// @param b Byte array to insert into.\n /// @param index Index in byte array of .\n /// @param input bytes to insert.\n /// @return b Updated input byte array\n function publicWriteBytes(\n bytes memory b,\n uint256 index,\n bytes memory input\n )\n public\n pure\n returns (bytes memory)\n {\n writeBytes(b, index, input);\n return b;\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 into.\n /// @param index Index in byte array of .\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 into.\n /// @param index Index in byte array of .\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 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 into.\n /// @param index Index in byte array of .\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 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 into \n memCopy(\n getMemAddress(b) + 32 + index, // +32 to skip length of \n getMemAddress(input), // includes length of \n input.length + 32 // +32 bytes to store 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 \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 \n getMemAddress(source) + 32, // +32 to skip length of \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" + "current/test/TestLibBytes/TestLibBytes.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 \"../../utils/LibBytes/LibBytes.sol\";\n\ncontract TestLibBytes {\n \n using LibBytes for bytes;\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 publicPopLastByte(bytes memory b)\n public\n pure\n returns (bytes memory, bytes1 result)\n {\n result = b.popLastByte();\n return (b, 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 publicPopLast20Bytes(bytes memory b)\n public\n pure\n returns (bytes memory, address result)\n {\n result = b.popLast20Bytes();\n return (b, result);\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 publicEquals(bytes memory lhs, bytes memory rhs)\n public\n pure\n returns (bool equal)\n {\n equal = lhs.equals(rhs);\n return equal;\n }\n \n function publicEqualsPop1(bytes memory lhs, bytes memory rhs)\n public\n pure\n returns (bool equal)\n {\n lhs.popLastByte();\n rhs.popLastByte();\n equal = lhs.equals(rhs);\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 publicDeepCopyBytes(\n bytes memory dest,\n bytes memory source\n )\n public\n pure\n returns (bytes memory)\n {\n LibBytes.deepCopyBytes(dest, source);\n return dest;\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 publicReadAddress(\n bytes memory b,\n uint256 index\n )\n public\n pure\n returns (address result)\n {\n result = b.readAddress(index);\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 publicWriteAddress(\n bytes memory b,\n uint256 index,\n address input\n )\n public\n pure\n returns (bytes memory)\n {\n b.writeAddress(index, input);\n return b;\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 publicReadBytes32(\n bytes memory b,\n uint256 index\n )\n public\n pure\n returns (bytes32 result)\n {\n result = b.readBytes32(index);\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 into.\n /// @param index Index in byte array of .\n /// @param input bytes32 to put into byte array.\n function publicWriteBytes32(\n bytes memory b,\n uint256 index,\n bytes32 input\n )\n public\n pure\n returns (bytes memory)\n {\n b.writeBytes32(index, input);\n return b;\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 publicReadUint256(\n bytes memory b,\n uint256 index\n )\n public\n pure\n returns (uint256 result)\n {\n result = b.readUint256(index);\n return result;\n }\n\n /// @dev Writes a uint256 into a specific position in a byte array.\n /// @param b Byte array to insert into.\n /// @param index Index in byte array of .\n /// @param input uint256 to put into byte array.\n function publicWriteUint256(\n bytes memory b,\n uint256 index,\n uint256 input\n )\n public\n pure\n returns (bytes memory)\n {\n b.writeUint256(index, input);\n return b;\n }\n\n /// @dev Reads an unpadded bytes4 value from a position in a byte array.\n /// @param b Byte array containing a bytes4 value.\n /// @param index Index in byte array of bytes4 value.\n /// @return bytes4 value from byte array.\n function publicReadBytes4(\n bytes memory b,\n uint256 index\n )\n public\n pure\n returns (bytes4 result)\n {\n result = b.readBytes4(index);\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 publicReadBytesWithLength(\n bytes memory b,\n uint256 index\n )\n public\n pure\n returns (bytes memory result)\n {\n result = b.readBytesWithLength(index);\n return result;\n }\n\n /// @dev Inserts bytes at a specific position in a byte array.\n /// @param b Byte array to insert into.\n /// @param index Index in byte array of .\n /// @param input bytes to insert.\n /// @return b Updated input byte array\n function publicWriteBytesWithLength(\n bytes memory b,\n uint256 index,\n bytes memory input\n )\n public\n pure\n returns (bytes memory)\n {\n b.writeBytesWithLength(index, input);\n return b;\n }\n \n /// @dev Copies a block of memory from one location to another.\n /// @param mem Memory contents we want to apply memCopy to\n /// @param dest Destination offset into .\n /// @param source Source offset into .\n /// @param length Length of bytes to copy from to \n /// @return mem Memory contents after calling memCopy.\n function testMemcpy(\n bytes mem,\n uint256 dest,\n uint256 source,\n uint256 length\n )\n public // not external, we need input in memory\n pure\n returns (bytes)\n {\n // Sanity check. Overflows are not checked.\n require(source + length <= mem.length);\n require(dest + length <= mem.length);\n\n // Get pointer to memory contents\n uint256 offset = mem.contentAddress();\n\n // Execute memCopy adjusted for memory array location\n LibBytes.memCopy(offset + dest, offset + source, length);\n\n // Return modified memory contents\n return mem;\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\nlibrary LibBytes {\n\n using LibBytes for bytes;\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. This\n /// points to the header of the byte array which contains\n /// the length.\n function rawAddress(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 Gets the memory address for the contents of a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of the contents of the byte array.\n function contentAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := add(input, 32)\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 /// @dev Returns a slices from a byte array.\n /// @param b The byte array to take a slice from.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n function slice(bytes memory b, uint256 from, uint256 to)\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure and copy contents\n result = new bytes(to - from);\n memCopy(\n result.contentAddress(),\n b.contentAddress() + from,\n result.length);\n return result;\n }\n \n /// @dev Returns a slice from a byte array without preserving the input.\n /// @param b The byte array to take a slice from. Will be destroyed in the process.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n /// @dev When `from == 0`, the original array will match the slice. In other cases its state will be corrupted.\n function sliceDestructive(bytes memory b, uint256 from, uint256 to)\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure around [from, to) in-place.\n assembly {\n result := add(b, from)\n mstore(result, sub(to, from))\n }\n return result;\n }\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 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 equals(\n bytes memory lhs,\n bytes memory rhs\n )\n internal\n pure\n returns (bool equal)\n {\n // Keccak gas cost is 30 + numWords * 6. This is a cheap way to compare.\n // We early exit on unequal lengths, but keccak would also correctly\n // handle this.\n return lhs.length == rhs.length && keccak256(lhs) == keccak256(rhs);\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 // Make sure input address is clean.\n // (Solidity does not guarantee this)\n input := and(input, 0xffffffffffffffffffffffffffffffffffffffff)\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 into.\n /// @param index Index in byte array of .\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 into.\n /// @param index Index in byte array of .\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 an unpadded bytes4 value from a position in a byte array.\n /// @param b Byte array containing a bytes4 value.\n /// @param index Index in byte array of bytes4 value.\n /// @return bytes4 value from byte array.\n function readBytes4(\n bytes memory b,\n uint256 index)\n internal\n pure\n returns (bytes4 result)\n {\n require(\n b.length >= index + 4,\n \"GREATER_OR_EQUAL_TO_4_LENGTH_REQUIRED\"\n );\n assembly {\n result := mload(add(b, 32))\n // Solidity does not require us to clean the trailing bytes.\n // We do it anyway\n result := and(result, 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000)\n }\n return result;\n }\n\n /// @dev Reads nested bytes from a specific position.\n /// @dev NOTE: the returned value overlaps with the input value.\n /// Both should be treated as immutable.\n /// @param b Byte array containing nested bytes.\n /// @param index Index of nested bytes.\n /// @return result Nested bytes.\n function readBytesWithLength(\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 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 // Return a pointer to the byte array as it exists inside `b`\n assembly {\n result := add(b, index)\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 into.\n /// @param index Index in byte array of .\n /// @param input bytes to insert.\n function writeBytesWithLength(\n bytes memory b,\n uint256 index,\n bytes memory input\n )\n internal\n pure\n {\n // Assert length of 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 into \n memCopy(\n b.contentAddress() + index,\n input.rawAddress(), // includes length of \n input.length + 32 // +32 bytes to store length\n );\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 dest.contentAddress(),\n source.contentAddress(),\n sourceLen\n );\n }\n}\n" }, - "sourceTreeHashHex": "0x60262fabfaf0c0397c585dac19eb0e8f386f0b4fc50dc7b2994ebfc7fda496af", + "sourceTreeHashHex": "0x0fd51dcc2ded34e0fa5a49f28cc52ff2aaf62c772a22a87ade5663c123565a05", "compiler": { "name": "solc", "version": "soljson-v0.4.24+commit.e67f0147.js", "settings": { "optimizer": { "enabled": true, - "runs": 200 + "runs": 1000000 }, "outputSelection": { "*": { -- cgit v1.2.3