@artblocks/contracts 1.3.0 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (19) hide show
  1. package/artifacts/contracts/interfaces/v0.8.x/IPMPV0.sol/IPMPV0.json +7 -1
  2. package/artifacts/contracts/libs/v0.8.x/ImmutableStringArray.sol/ImmutableStringArray.json +2 -2
  3. package/artifacts/contracts/mock/ImmutableStringArrayMock.sol/ImmutableStringArrayMock.json +2 -2
  4. package/artifacts/contracts/mock/MockPMPAugmentHook.sol/MockPMPAugmentHook.json +2 -2
  5. package/artifacts/contracts/mock/MockPMPConfigureHook.sol/MockPMPConfigureHook.json +2 -2
  6. package/artifacts/contracts/web3call/PMPV0.sol/PMPV0.json +9 -3
  7. package/artifacts/contracts/web3call/augment-hooks/InjectBaseGasFee.sol/InjectBaseGasFee.json +2 -2
  8. package/artifacts/contracts/web3call/augment-hooks/InjectChromieSquiggleFloorPrice.sol/InjectChromieSquiggleFloorPrice.json +2 -2
  9. package/artifacts/contracts/web3call/augment-hooks/InjectIsNounsDaoMember.sol/InjectIsNounsDaoMember.json +2 -2
  10. package/artifacts/contracts/web3call/augment-hooks/InjectIsProjectFullyMinted.sol/InjectIsProjectFullyMinted.json +2 -2
  11. package/artifacts/contracts/web3call/augment-hooks/InjectPolyptychTokenHash.sol/InjectPolyptychTokenHash.json +2 -2
  12. package/artifacts/contracts/web3call/augment-hooks/InjectTokenHashSeed.sol/InjectTokenHashSeed.json +2 -2
  13. package/artifacts/contracts/web3call/augment-hooks/InjectTokenOwner.sol/InjectTokenOwner.json +2 -2
  14. package/artifacts/contracts/web3call/augment-hooks/InjectTokenOwnerEthBalance.sol/InjectTokenOwnerEthBalance.json +2 -2
  15. package/artifacts/contracts/web3call/augment-hooks/InjectUSDCTotalSupply.sol/InjectUSDCTotalSupply.json +2 -2
  16. package/contracts/interfaces/v0.8.x/IPMPV0.sol +5 -3
  17. package/contracts/libs/v0.8.x/ImmutableStringArray.sol +15 -3
  18. package/contracts/web3call/PMPV0.sol +93 -98
  19. package/package.json +2 -2
@@ -134,8 +134,8 @@
134
134
  "type": "function"
135
135
  }
136
136
  ],
137
- "bytecode": "0x60c060405234801561001057600080fd5b506040516109dd3803806109dd83398101604081905261002f91610045565b6001600160a01b0390911660a05260805261007f565b6000806040838503121561005857600080fd5b82516001600160a01b038116811461006f57600080fd5b6020939093015192949293505050565b60805160a05161092d6100b06000396000818160b30152610271015260008181607e0152610228015261092d6000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301ffc9a7146100515780634d84f2d41461007957806356ecea49146100ae57806358f8699f146100ed575b600080fd5b61006461005f36600461057a565b61010d565b60405190151581526020015b60405180910390f35b6100a07f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610070565b6100d57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610070565b6101006100fb3660046105a4565b610144565b6040516100709190610681565b60006001600160e01b031982166358f8699f60e01b148061013e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606081600061015482600161071e565b9050806001600160401b0381111561016e5761016e610731565b6040519080825280602002602001820160405280156101b357816020015b604080518082019091526060808252602082015281526020019060019003908161018c5790505b50925060005b82811015610213578585828181106101d3576101d3610747565b90506020028101906101e5919061075d565b6101ee90610809565b84828151811061020057610200610747565b60209081029190910101526001016101b9565b50600061021f87610346565b9050600061024d7f000000000000000000000000000000000000000000000000000000000000000083610355565b60405163188687dd60e21b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063621a1f7490602401602060405180830381865afa1580156102b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102dc919061088e565b60408051608081018252600f9181019182526e0e6deeae4c6caa8ded6cadc90c2e6d608b1b60608201529081529091506020810161031983610376565b81525086868151811061032e5761032e610747565b60200260200101819052505050505050949350505050565b600061013e620f4240836108a7565b600081610365620f4240856108c9565b61036f919061071e565b9392505050565b606061013e826103858461038d565b6001016103f7565b600080608083901c156103a55760809290921c916010015b604083901c156103ba5760409290921c916008015b602083901c156103cf5760209290921c916004015b601083901c156103e45760109290921c916002015b600883901c1561013e5760010192915050565b60608260006104078460026108c9565b61041290600261071e565b6001600160401b0381111561042957610429610731565b6040519080825280601f01601f191660200182016040528015610453576020820181803683370190505b509050600360fc1b8160008151811061046e5761046e610747565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061049d5761049d610747565b60200101906001600160f81b031916908160001a90535060006104c18560026108c9565b6104cc90600161071e565b90505b6001811115610544576f181899199a1a9b1b9c1cb0b131b232b360811b83600f166010811061050057610500610747565b1a60f81b82828151811061051657610516610747565b60200101906001600160f81b031916908160001a90535060049290921c9161053d816108e0565b90506104cf565b5081156105725760405163e22e27eb60e01b8152600481018690526024810185905260440160405180910390fd5b949350505050565b60006020828403121561058c57600080fd5b81356001600160e01b03198116811461036f57600080fd5b600080600080606085870312156105ba57600080fd5b84356001600160a01b03811681146105d157600080fd5b93506020850135925060408501356001600160401b03808211156105f457600080fd5b818701915087601f83011261060857600080fd5b81358181111561061757600080fd5b8860208260051b850101111561062c57600080fd5b95989497505060200194505050565b6000815180845260005b8181101561066157602081850181015186830182015201610645565b506000602082860101526020601f19601f83011685010191505092915050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156106fa57888303603f19018552815180518785526106ce8886018261063b565b91890151858303868b01529190506106e6818361063b565b9689019694505050908601906001016106aa565b509098975050505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561013e5761013e610708565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e1983360301811261077357600080fd5b9190910192915050565b600082601f83011261078e57600080fd5b81356001600160401b03808211156107a8576107a8610731565b604051601f8301601f19908116603f011681019082821181831017156107d0576107d0610731565b816040528381528660208588010111156107e957600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006040823603121561081b57600080fd5b604080519081016001600160401b03808211838310171561083e5761083e610731565b81604052843591508082111561085357600080fd5b61085f3683870161077d565b8352602085013591508082111561087557600080fd5b506108823682860161077d565b60208301525092915050565b6000602082840312156108a057600080fd5b5051919050565b6000826108c457634e487b7160e01b600052601260045260246000fd5b500690565b808202811582820484141761013e5761013e610708565b6000816108ef576108ef610708565b50600019019056fea26469706673582212200970be6b3c579c23b290d959def6214aa1cf27142a500fa4f8d725f87bc938ae64736f6c63430008160033",
138
- "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301ffc9a7146100515780634d84f2d41461007957806356ecea49146100ae57806358f8699f146100ed575b600080fd5b61006461005f36600461057a565b61010d565b60405190151581526020015b60405180910390f35b6100a07f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610070565b6100d57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610070565b6101006100fb3660046105a4565b610144565b6040516100709190610681565b60006001600160e01b031982166358f8699f60e01b148061013e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606081600061015482600161071e565b9050806001600160401b0381111561016e5761016e610731565b6040519080825280602002602001820160405280156101b357816020015b604080518082019091526060808252602082015281526020019060019003908161018c5790505b50925060005b82811015610213578585828181106101d3576101d3610747565b90506020028101906101e5919061075d565b6101ee90610809565b84828151811061020057610200610747565b60209081029190910101526001016101b9565b50600061021f87610346565b9050600061024d7f000000000000000000000000000000000000000000000000000000000000000083610355565b60405163188687dd60e21b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063621a1f7490602401602060405180830381865afa1580156102b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102dc919061088e565b60408051608081018252600f9181019182526e0e6deeae4c6caa8ded6cadc90c2e6d608b1b60608201529081529091506020810161031983610376565b81525086868151811061032e5761032e610747565b60200260200101819052505050505050949350505050565b600061013e620f4240836108a7565b600081610365620f4240856108c9565b61036f919061071e565b9392505050565b606061013e826103858461038d565b6001016103f7565b600080608083901c156103a55760809290921c916010015b604083901c156103ba5760409290921c916008015b602083901c156103cf5760209290921c916004015b601083901c156103e45760109290921c916002015b600883901c1561013e5760010192915050565b60608260006104078460026108c9565b61041290600261071e565b6001600160401b0381111561042957610429610731565b6040519080825280601f01601f191660200182016040528015610453576020820181803683370190505b509050600360fc1b8160008151811061046e5761046e610747565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061049d5761049d610747565b60200101906001600160f81b031916908160001a90535060006104c18560026108c9565b6104cc90600161071e565b90505b6001811115610544576f181899199a1a9b1b9c1cb0b131b232b360811b83600f166010811061050057610500610747565b1a60f81b82828151811061051657610516610747565b60200101906001600160f81b031916908160001a90535060049290921c9161053d816108e0565b90506104cf565b5081156105725760405163e22e27eb60e01b8152600481018690526024810185905260440160405180910390fd5b949350505050565b60006020828403121561058c57600080fd5b81356001600160e01b03198116811461036f57600080fd5b600080600080606085870312156105ba57600080fd5b84356001600160a01b03811681146105d157600080fd5b93506020850135925060408501356001600160401b03808211156105f457600080fd5b818701915087601f83011261060857600080fd5b81358181111561061757600080fd5b8860208260051b850101111561062c57600080fd5b95989497505060200194505050565b6000815180845260005b8181101561066157602081850181015186830182015201610645565b506000602082860101526020601f19601f83011685010191505092915050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156106fa57888303603f19018552815180518785526106ce8886018261063b565b91890151858303868b01529190506106e6818361063b565b9689019694505050908601906001016106aa565b509098975050505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561013e5761013e610708565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e1983360301811261077357600080fd5b9190910192915050565b600082601f83011261078e57600080fd5b81356001600160401b03808211156107a8576107a8610731565b604051601f8301601f19908116603f011681019082821181831017156107d0576107d0610731565b816040528381528660208588010111156107e957600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006040823603121561081b57600080fd5b604080519081016001600160401b03808211838310171561083e5761083e610731565b81604052843591508082111561085357600080fd5b61085f3683870161077d565b8352602085013591508082111561087557600080fd5b506108823682860161077d565b60208301525092915050565b6000602082840312156108a057600080fd5b5051919050565b6000826108c457634e487b7160e01b600052601260045260246000fd5b500690565b808202811582820484141761013e5761013e610708565b6000816108ef576108ef610708565b50600019019056fea26469706673582212200970be6b3c579c23b290d959def6214aa1cf27142a500fa4f8d725f87bc938ae64736f6c63430008160033",
137
+ "bytecode": "0x60c060405234801561001057600080fd5b506040516109dd3803806109dd83398101604081905261002f91610045565b6001600160a01b0390911660a05260805261007f565b6000806040838503121561005857600080fd5b82516001600160a01b038116811461006f57600080fd5b6020939093015192949293505050565b60805160a05161092d6100b06000396000818160b30152610271015260008181607e0152610228015261092d6000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301ffc9a7146100515780634d84f2d41461007957806356ecea49146100ae57806358f8699f146100ed575b600080fd5b61006461005f36600461057a565b61010d565b60405190151581526020015b60405180910390f35b6100a07f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610070565b6100d57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610070565b6101006100fb3660046105a4565b610144565b6040516100709190610681565b60006001600160e01b031982166358f8699f60e01b148061013e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606081600061015482600161071e565b9050806001600160401b0381111561016e5761016e610731565b6040519080825280602002602001820160405280156101b357816020015b604080518082019091526060808252602082015281526020019060019003908161018c5790505b50925060005b82811015610213578585828181106101d3576101d3610747565b90506020028101906101e5919061075d565b6101ee90610809565b84828151811061020057610200610747565b60209081029190910101526001016101b9565b50600061021f87610346565b9050600061024d7f000000000000000000000000000000000000000000000000000000000000000083610355565b60405163188687dd60e21b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063621a1f7490602401602060405180830381865afa1580156102b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102dc919061088e565b60408051608081018252600f9181019182526e0e6deeae4c6caa8ded6cadc90c2e6d608b1b60608201529081529091506020810161031983610376565b81525086868151811061032e5761032e610747565b60200260200101819052505050505050949350505050565b600061013e620f4240836108a7565b600081610365620f4240856108c9565b61036f919061071e565b9392505050565b606061013e826103858461038d565b6001016103f7565b600080608083901c156103a55760809290921c916010015b604083901c156103ba5760409290921c916008015b602083901c156103cf5760209290921c916004015b601083901c156103e45760109290921c916002015b600883901c1561013e5760010192915050565b60608260006104078460026108c9565b61041290600261071e565b6001600160401b0381111561042957610429610731565b6040519080825280601f01601f191660200182016040528015610453576020820181803683370190505b509050600360fc1b8160008151811061046e5761046e610747565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061049d5761049d610747565b60200101906001600160f81b031916908160001a90535060006104c18560026108c9565b6104cc90600161071e565b90505b6001811115610544576f181899199a1a9b1b9c1cb0b131b232b360811b83600f166010811061050057610500610747565b1a60f81b82828151811061051657610516610747565b60200101906001600160f81b031916908160001a90535060049290921c9161053d816108e0565b90506104cf565b5081156105725760405163e22e27eb60e01b8152600481018690526024810185905260440160405180910390fd5b949350505050565b60006020828403121561058c57600080fd5b81356001600160e01b03198116811461036f57600080fd5b600080600080606085870312156105ba57600080fd5b84356001600160a01b03811681146105d157600080fd5b93506020850135925060408501356001600160401b03808211156105f457600080fd5b818701915087601f83011261060857600080fd5b81358181111561061757600080fd5b8860208260051b850101111561062c57600080fd5b95989497505060200194505050565b6000815180845260005b8181101561066157602081850181015186830182015201610645565b506000602082860101526020601f19601f83011685010191505092915050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156106fa57888303603f19018552815180518785526106ce8886018261063b565b91890151858303868b01529190506106e6818361063b565b9689019694505050908601906001016106aa565b509098975050505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561013e5761013e610708565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e1983360301811261077357600080fd5b9190910192915050565b600082601f83011261078e57600080fd5b81356001600160401b03808211156107a8576107a8610731565b604051601f8301601f19908116603f011681019082821181831017156107d0576107d0610731565b816040528381528660208588010111156107e957600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006040823603121561081b57600080fd5b604080519081016001600160401b03808211838310171561083e5761083e610731565b81604052843591508082111561085357600080fd5b61085f3683870161077d565b8352602085013591508082111561087557600080fd5b506108823682860161077d565b60208301525092915050565b6000602082840312156108a057600080fd5b5051919050565b6000826108c457634e487b7160e01b600052601260045260246000fd5b500690565b808202811582820484141761013e5761013e610708565b6000816108ef576108ef610708565b50600019019056fea2646970667358221220853017c6efb891bf8537f1930502c48f431834d7b4baa01a1b1c3e20eb12a0b464736f6c63430008160033",
138
+ "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301ffc9a7146100515780634d84f2d41461007957806356ecea49146100ae57806358f8699f146100ed575b600080fd5b61006461005f36600461057a565b61010d565b60405190151581526020015b60405180910390f35b6100a07f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610070565b6100d57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610070565b6101006100fb3660046105a4565b610144565b6040516100709190610681565b60006001600160e01b031982166358f8699f60e01b148061013e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606081600061015482600161071e565b9050806001600160401b0381111561016e5761016e610731565b6040519080825280602002602001820160405280156101b357816020015b604080518082019091526060808252602082015281526020019060019003908161018c5790505b50925060005b82811015610213578585828181106101d3576101d3610747565b90506020028101906101e5919061075d565b6101ee90610809565b84828151811061020057610200610747565b60209081029190910101526001016101b9565b50600061021f87610346565b9050600061024d7f000000000000000000000000000000000000000000000000000000000000000083610355565b60405163188687dd60e21b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063621a1f7490602401602060405180830381865afa1580156102b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102dc919061088e565b60408051608081018252600f9181019182526e0e6deeae4c6caa8ded6cadc90c2e6d608b1b60608201529081529091506020810161031983610376565b81525086868151811061032e5761032e610747565b60200260200101819052505050505050949350505050565b600061013e620f4240836108a7565b600081610365620f4240856108c9565b61036f919061071e565b9392505050565b606061013e826103858461038d565b6001016103f7565b600080608083901c156103a55760809290921c916010015b604083901c156103ba5760409290921c916008015b602083901c156103cf5760209290921c916004015b601083901c156103e45760109290921c916002015b600883901c1561013e5760010192915050565b60608260006104078460026108c9565b61041290600261071e565b6001600160401b0381111561042957610429610731565b6040519080825280601f01601f191660200182016040528015610453576020820181803683370190505b509050600360fc1b8160008151811061046e5761046e610747565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061049d5761049d610747565b60200101906001600160f81b031916908160001a90535060006104c18560026108c9565b6104cc90600161071e565b90505b6001811115610544576f181899199a1a9b1b9c1cb0b131b232b360811b83600f166010811061050057610500610747565b1a60f81b82828151811061051657610516610747565b60200101906001600160f81b031916908160001a90535060049290921c9161053d816108e0565b90506104cf565b5081156105725760405163e22e27eb60e01b8152600481018690526024810185905260440160405180910390fd5b949350505050565b60006020828403121561058c57600080fd5b81356001600160e01b03198116811461036f57600080fd5b600080600080606085870312156105ba57600080fd5b84356001600160a01b03811681146105d157600080fd5b93506020850135925060408501356001600160401b03808211156105f457600080fd5b818701915087601f83011261060857600080fd5b81358181111561061757600080fd5b8860208260051b850101111561062c57600080fd5b95989497505060200194505050565b6000815180845260005b8181101561066157602081850181015186830182015201610645565b506000602082860101526020601f19601f83011685010191505092915050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156106fa57888303603f19018552815180518785526106ce8886018261063b565b91890151858303868b01529190506106e6818361063b565b9689019694505050908601906001016106aa565b509098975050505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561013e5761013e610708565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e1983360301811261077357600080fd5b9190910192915050565b600082601f83011261078e57600080fd5b81356001600160401b03808211156107a8576107a8610731565b604051601f8301601f19908116603f011681019082821181831017156107d0576107d0610731565b816040528381528660208588010111156107e957600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006040823603121561081b57600080fd5b604080519081016001600160401b03808211838310171561083e5761083e610731565b81604052843591508082111561085357600080fd5b61085f3683870161077d565b8352602085013591508082111561087557600080fd5b506108823682860161077d565b60208301525092915050565b6000602082840312156108a057600080fd5b5051919050565b6000826108c457634e487b7160e01b600052601260045260246000fd5b500690565b808202811582820484141761013e5761013e610708565b6000816108ef576108ef610708565b50600019019056fea2646970667358221220853017c6efb891bf8537f1930502c48f431834d7b4baa01a1b1c3e20eb12a0b464736f6c63430008160033",
139
139
  "linkReferences": {},
140
140
  "deployedLinkReferences": {}
141
141
  }
@@ -92,8 +92,8 @@
92
92
  "type": "function"
93
93
  }
94
94
  ],
95
- "bytecode": "0x608060405234801561001057600080fd5b50610813806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806301ffc9a71461003b57806358f8699f14610063575b600080fd5b61004e61004936600461046a565b610083565b60405190151581526020015b60405180910390f35b61007661007136600461049b565b6100ba565b60405161005a9190610578565b60006001600160e01b031982166358f8699f60e01b14806100b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60608160006100ca826001610615565b9050806001600160401b038111156100e4576100e4610628565b60405190808252806020026020018201604052801561012957816020015b60408051808201909152606080825260208201528152602001906001900390816101025790505b50925060005b82811015610189578585828181106101495761014961063e565b905060200281019061015b9190610654565b61016490610700565b8482815181106101765761017661063e565b602090810291909101015260010161012f565b50604051634d01727d60e11b8152600481018790526000906001600160a01b03891690639a02e4fa90602401602060405180830381865afa1580156101d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f69190610785565b60408051608081018252600d9181019182526c1d1bdad95b92185cda14d95959609a1b60608201529081529091506020810161023b6001600160a01b03198416610266565b8152508484815181106102505761025061063e565b6020026020010181905250505050949350505050565b60606100b4826102758461027d565b6001016102e7565b600080608083901c156102955760809290921c916010015b604083901c156102aa5760409290921c916008015b602083901c156102bf5760209290921c916004015b601083901c156102d45760109290921c916002015b600883901c156100b45760010192915050565b60608260006102f78460026107af565b610302906002610615565b6001600160401b0381111561031957610319610628565b6040519080825280601f01601f191660200182016040528015610343576020820181803683370190505b509050600360fc1b8160008151811061035e5761035e61063e565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061038d5761038d61063e565b60200101906001600160f81b031916908160001a90535060006103b18560026107af565b6103bc906001610615565b90505b6001811115610434576f181899199a1a9b1b9c1cb0b131b232b360811b83600f16601081106103f0576103f061063e565b1a60f81b8282815181106104065761040661063e565b60200101906001600160f81b031916908160001a90535060049290921c9161042d816107c6565b90506103bf565b5081156104625760405163e22e27eb60e01b8152600481018690526024810185905260440160405180910390fd5b949350505050565b60006020828403121561047c57600080fd5b81356001600160e01b03198116811461049457600080fd5b9392505050565b600080600080606085870312156104b157600080fd5b84356001600160a01b03811681146104c857600080fd5b93506020850135925060408501356001600160401b03808211156104eb57600080fd5b818701915087601f8301126104ff57600080fd5b81358181111561050e57600080fd5b8860208260051b850101111561052357600080fd5b95989497505060200194505050565b6000815180845260005b818110156105585760208185018101518683018201520161053c565b506000602082860101526020601f19601f83011685010191505092915050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156105f157888303603f19018552815180518785526105c588860182610532565b91890151858303868b01529190506105dd8183610532565b9689019694505050908601906001016105a1565b509098975050505050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156100b4576100b46105ff565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e1983360301811261066a57600080fd5b9190910192915050565b600082601f83011261068557600080fd5b81356001600160401b038082111561069f5761069f610628565b604051601f8301601f19908116603f011681019082821181831017156106c7576106c7610628565b816040528381528660208588010111156106e057600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006040823603121561071257600080fd5b604080519081016001600160401b03808211838310171561073557610735610628565b81604052843591508082111561074a57600080fd5b61075636838701610674565b8352602085013591508082111561076c57600080fd5b5061077936828601610674565b60208301525092915050565b60006020828403121561079757600080fd5b81516001600160a01b03198116811461049457600080fd5b80820281158282048414176100b4576100b46105ff565b6000816107d5576107d56105ff565b50600019019056fea2646970667358221220c89ad774faa768ae62a5cd9b67890fed1fc57ac6361dc2be59b3b06714b9734364736f6c63430008160033",
96
- "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c806301ffc9a71461003b57806358f8699f14610063575b600080fd5b61004e61004936600461046a565b610083565b60405190151581526020015b60405180910390f35b61007661007136600461049b565b6100ba565b60405161005a9190610578565b60006001600160e01b031982166358f8699f60e01b14806100b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60608160006100ca826001610615565b9050806001600160401b038111156100e4576100e4610628565b60405190808252806020026020018201604052801561012957816020015b60408051808201909152606080825260208201528152602001906001900390816101025790505b50925060005b82811015610189578585828181106101495761014961063e565b905060200281019061015b9190610654565b61016490610700565b8482815181106101765761017661063e565b602090810291909101015260010161012f565b50604051634d01727d60e11b8152600481018790526000906001600160a01b03891690639a02e4fa90602401602060405180830381865afa1580156101d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f69190610785565b60408051608081018252600d9181019182526c1d1bdad95b92185cda14d95959609a1b60608201529081529091506020810161023b6001600160a01b03198416610266565b8152508484815181106102505761025061063e565b6020026020010181905250505050949350505050565b60606100b4826102758461027d565b6001016102e7565b600080608083901c156102955760809290921c916010015b604083901c156102aa5760409290921c916008015b602083901c156102bf5760209290921c916004015b601083901c156102d45760109290921c916002015b600883901c156100b45760010192915050565b60608260006102f78460026107af565b610302906002610615565b6001600160401b0381111561031957610319610628565b6040519080825280601f01601f191660200182016040528015610343576020820181803683370190505b509050600360fc1b8160008151811061035e5761035e61063e565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061038d5761038d61063e565b60200101906001600160f81b031916908160001a90535060006103b18560026107af565b6103bc906001610615565b90505b6001811115610434576f181899199a1a9b1b9c1cb0b131b232b360811b83600f16601081106103f0576103f061063e565b1a60f81b8282815181106104065761040661063e565b60200101906001600160f81b031916908160001a90535060049290921c9161042d816107c6565b90506103bf565b5081156104625760405163e22e27eb60e01b8152600481018690526024810185905260440160405180910390fd5b949350505050565b60006020828403121561047c57600080fd5b81356001600160e01b03198116811461049457600080fd5b9392505050565b600080600080606085870312156104b157600080fd5b84356001600160a01b03811681146104c857600080fd5b93506020850135925060408501356001600160401b03808211156104eb57600080fd5b818701915087601f8301126104ff57600080fd5b81358181111561050e57600080fd5b8860208260051b850101111561052357600080fd5b95989497505060200194505050565b6000815180845260005b818110156105585760208185018101518683018201520161053c565b506000602082860101526020601f19601f83011685010191505092915050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156105f157888303603f19018552815180518785526105c588860182610532565b91890151858303868b01529190506105dd8183610532565b9689019694505050908601906001016105a1565b509098975050505050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156100b4576100b46105ff565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e1983360301811261066a57600080fd5b9190910192915050565b600082601f83011261068557600080fd5b81356001600160401b038082111561069f5761069f610628565b604051601f8301601f19908116603f011681019082821181831017156106c7576106c7610628565b816040528381528660208588010111156106e057600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006040823603121561071257600080fd5b604080519081016001600160401b03808211838310171561073557610735610628565b81604052843591508082111561074a57600080fd5b61075636838701610674565b8352602085013591508082111561076c57600080fd5b5061077936828601610674565b60208301525092915050565b60006020828403121561079757600080fd5b81516001600160a01b03198116811461049457600080fd5b80820281158282048414176100b4576100b46105ff565b6000816107d5576107d56105ff565b50600019019056fea2646970667358221220c89ad774faa768ae62a5cd9b67890fed1fc57ac6361dc2be59b3b06714b9734364736f6c63430008160033",
95
+ "bytecode": "0x608060405234801561001057600080fd5b50610813806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806301ffc9a71461003b57806358f8699f14610063575b600080fd5b61004e61004936600461046a565b610083565b60405190151581526020015b60405180910390f35b61007661007136600461049b565b6100ba565b60405161005a9190610578565b60006001600160e01b031982166358f8699f60e01b14806100b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60608160006100ca826001610615565b9050806001600160401b038111156100e4576100e4610628565b60405190808252806020026020018201604052801561012957816020015b60408051808201909152606080825260208201528152602001906001900390816101025790505b50925060005b82811015610189578585828181106101495761014961063e565b905060200281019061015b9190610654565b61016490610700565b8482815181106101765761017661063e565b602090810291909101015260010161012f565b50604051634d01727d60e11b8152600481018790526000906001600160a01b03891690639a02e4fa90602401602060405180830381865afa1580156101d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f69190610785565b60408051608081018252600d9181019182526c1d1bdad95b92185cda14d95959609a1b60608201529081529091506020810161023b6001600160a01b03198416610266565b8152508484815181106102505761025061063e565b6020026020010181905250505050949350505050565b60606100b4826102758461027d565b6001016102e7565b600080608083901c156102955760809290921c916010015b604083901c156102aa5760409290921c916008015b602083901c156102bf5760209290921c916004015b601083901c156102d45760109290921c916002015b600883901c156100b45760010192915050565b60608260006102f78460026107af565b610302906002610615565b6001600160401b0381111561031957610319610628565b6040519080825280601f01601f191660200182016040528015610343576020820181803683370190505b509050600360fc1b8160008151811061035e5761035e61063e565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061038d5761038d61063e565b60200101906001600160f81b031916908160001a90535060006103b18560026107af565b6103bc906001610615565b90505b6001811115610434576f181899199a1a9b1b9c1cb0b131b232b360811b83600f16601081106103f0576103f061063e565b1a60f81b8282815181106104065761040661063e565b60200101906001600160f81b031916908160001a90535060049290921c9161042d816107c6565b90506103bf565b5081156104625760405163e22e27eb60e01b8152600481018690526024810185905260440160405180910390fd5b949350505050565b60006020828403121561047c57600080fd5b81356001600160e01b03198116811461049457600080fd5b9392505050565b600080600080606085870312156104b157600080fd5b84356001600160a01b03811681146104c857600080fd5b93506020850135925060408501356001600160401b03808211156104eb57600080fd5b818701915087601f8301126104ff57600080fd5b81358181111561050e57600080fd5b8860208260051b850101111561052357600080fd5b95989497505060200194505050565b6000815180845260005b818110156105585760208185018101518683018201520161053c565b506000602082860101526020601f19601f83011685010191505092915050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156105f157888303603f19018552815180518785526105c588860182610532565b91890151858303868b01529190506105dd8183610532565b9689019694505050908601906001016105a1565b509098975050505050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156100b4576100b46105ff565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e1983360301811261066a57600080fd5b9190910192915050565b600082601f83011261068557600080fd5b81356001600160401b038082111561069f5761069f610628565b604051601f8301601f19908116603f011681019082821181831017156106c7576106c7610628565b816040528381528660208588010111156106e057600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006040823603121561071257600080fd5b604080519081016001600160401b03808211838310171561073557610735610628565b81604052843591508082111561074a57600080fd5b61075636838701610674565b8352602085013591508082111561076c57600080fd5b5061077936828601610674565b60208301525092915050565b60006020828403121561079757600080fd5b81516001600160a01b03198116811461049457600080fd5b80820281158282048414176100b4576100b46105ff565b6000816107d5576107d56105ff565b50600019019056fea26469706673582212208247bd4046b8adca6a5b725d8c520c8a539c79239122a78e9f4aef06702466c764736f6c63430008160033",
96
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c806301ffc9a71461003b57806358f8699f14610063575b600080fd5b61004e61004936600461046a565b610083565b60405190151581526020015b60405180910390f35b61007661007136600461049b565b6100ba565b60405161005a9190610578565b60006001600160e01b031982166358f8699f60e01b14806100b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60608160006100ca826001610615565b9050806001600160401b038111156100e4576100e4610628565b60405190808252806020026020018201604052801561012957816020015b60408051808201909152606080825260208201528152602001906001900390816101025790505b50925060005b82811015610189578585828181106101495761014961063e565b905060200281019061015b9190610654565b61016490610700565b8482815181106101765761017661063e565b602090810291909101015260010161012f565b50604051634d01727d60e11b8152600481018790526000906001600160a01b03891690639a02e4fa90602401602060405180830381865afa1580156101d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f69190610785565b60408051608081018252600d9181019182526c1d1bdad95b92185cda14d95959609a1b60608201529081529091506020810161023b6001600160a01b03198416610266565b8152508484815181106102505761025061063e565b6020026020010181905250505050949350505050565b60606100b4826102758461027d565b6001016102e7565b600080608083901c156102955760809290921c916010015b604083901c156102aa5760409290921c916008015b602083901c156102bf5760209290921c916004015b601083901c156102d45760109290921c916002015b600883901c156100b45760010192915050565b60608260006102f78460026107af565b610302906002610615565b6001600160401b0381111561031957610319610628565b6040519080825280601f01601f191660200182016040528015610343576020820181803683370190505b509050600360fc1b8160008151811061035e5761035e61063e565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061038d5761038d61063e565b60200101906001600160f81b031916908160001a90535060006103b18560026107af565b6103bc906001610615565b90505b6001811115610434576f181899199a1a9b1b9c1cb0b131b232b360811b83600f16601081106103f0576103f061063e565b1a60f81b8282815181106104065761040661063e565b60200101906001600160f81b031916908160001a90535060049290921c9161042d816107c6565b90506103bf565b5081156104625760405163e22e27eb60e01b8152600481018690526024810185905260440160405180910390fd5b949350505050565b60006020828403121561047c57600080fd5b81356001600160e01b03198116811461049457600080fd5b9392505050565b600080600080606085870312156104b157600080fd5b84356001600160a01b03811681146104c857600080fd5b93506020850135925060408501356001600160401b03808211156104eb57600080fd5b818701915087601f8301126104ff57600080fd5b81358181111561050e57600080fd5b8860208260051b850101111561052357600080fd5b95989497505060200194505050565b6000815180845260005b818110156105585760208185018101518683018201520161053c565b506000602082860101526020601f19601f83011685010191505092915050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156105f157888303603f19018552815180518785526105c588860182610532565b91890151858303868b01529190506105dd8183610532565b9689019694505050908601906001016105a1565b509098975050505050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156100b4576100b46105ff565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e1983360301811261066a57600080fd5b9190910192915050565b600082601f83011261068557600080fd5b81356001600160401b038082111561069f5761069f610628565b604051601f8301601f19908116603f011681019082821181831017156106c7576106c7610628565b816040528381528660208588010111156106e057600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006040823603121561071257600080fd5b604080519081016001600160401b03808211838310171561073557610735610628565b81604052843591508082111561074a57600080fd5b61075636838701610674565b8352602085013591508082111561076c57600080fd5b5061077936828601610674565b60208301525092915050565b60006020828403121561079757600080fd5b81516001600160a01b03198116811461049457600080fd5b80820281158282048414176100b4576100b46105ff565b6000816107d5576107d56105ff565b50600019019056fea26469706673582212208247bd4046b8adca6a5b725d8c520c8a539c79239122a78e9f4aef06702466c764736f6c63430008160033",
97
97
  "linkReferences": {},
98
98
  "deployedLinkReferences": {}
99
99
  }
@@ -92,8 +92,8 @@
92
92
  "type": "function"
93
93
  }
94
94
  ],
95
- "bytecode": "0x608060405234801561001057600080fd5b5061079e806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806301ffc9a71461003b57806358f8699f14610063575b600080fd5b61004e6100493660046103f6565b610083565b60405190151581526020015b60405180910390f35b61007661007136600461043f565b6100ba565b60405161005a9190610510565b60006001600160e01b031982166358f8699f60e01b14806100b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60608160006100ca8260016105ad565b9050806001600160401b038111156100e4576100e46105c0565b60405190808252806020026020018201604052801561012957816020015b60408051808201909152606080825260208201528152602001906001900390816101025790505b50925060005b8281101561018957858582818110610149576101496105d6565b905060200281019061015b91906105ec565b61016490610698565b848281518110610176576101766105d6565b602090810291909101015260010161012f565b506040516331a9108f60e11b8152600481018790526000906001600160a01b03891690636352211e90602401602060405180830381865afa1580156101d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f6919061071d565b60408051608081018252600a918101918252693a37b5b2b727bbb732b960b11b6060820152908152909150602081016102376001600160a01b038416610262565b81525084848151811061024c5761024c6105d6565b6020026020010181905250505050949350505050565b60606100b46001600160a01b0383166014606082600061028384600261073a565b61028e9060026105ad565b6001600160401b038111156102a5576102a56105c0565b6040519080825280601f01601f1916602001820160405280156102cf576020820181803683370190505b509050600360fc1b816000815181106102ea576102ea6105d6565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610319576103196105d6565b60200101906001600160f81b031916908160001a905350600061033d85600261073a565b6103489060016105ad565b90505b60018111156103c0576f181899199a1a9b1b9c1cb0b131b232b360811b83600f166010811061037c5761037c6105d6565b1a60f81b828281518110610392576103926105d6565b60200101906001600160f81b031916908160001a90535060049290921c916103b981610751565b905061034b565b5081156103ee5760405163e22e27eb60e01b8152600481018690526024810185905260440160405180910390fd5b949350505050565b60006020828403121561040857600080fd5b81356001600160e01b03198116811461042057600080fd5b9392505050565b6001600160a01b038116811461043c57600080fd5b50565b6000806000806060858703121561045557600080fd5b843561046081610427565b93506020850135925060408501356001600160401b038082111561048357600080fd5b818701915087601f83011261049757600080fd5b8135818111156104a657600080fd5b8860208260051b85010111156104bb57600080fd5b95989497505060200194505050565b6000815180845260005b818110156104f0576020818501810151868301820152016104d4565b506000602082860101526020601f19601f83011685010191505092915050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b8381101561058957888303603f190185528151805187855261055d888601826104ca565b91890151858303868b015291905061057581836104ca565b968901969450505090860190600101610539565b509098975050505050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156100b4576100b4610597565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e1983360301811261060257600080fd5b9190910192915050565b600082601f83011261061d57600080fd5b81356001600160401b0380821115610637576106376105c0565b604051601f8301601f19908116603f0116810190828211818310171561065f5761065f6105c0565b8160405283815286602085880101111561067857600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000604082360312156106aa57600080fd5b604080519081016001600160401b0380821183831017156106cd576106cd6105c0565b8160405284359150808211156106e257600080fd5b6106ee3683870161060c565b8352602085013591508082111561070457600080fd5b506107113682860161060c565b60208301525092915050565b60006020828403121561072f57600080fd5b815161042081610427565b80820281158282048414176100b4576100b4610597565b60008161076057610760610597565b50600019019056fea26469706673582212207ac953db0f329b64d5d585c2157b04ffed40f50a9a3d45ad35eb3e33ba6733e764736f6c63430008160033",
96
- "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c806301ffc9a71461003b57806358f8699f14610063575b600080fd5b61004e6100493660046103f6565b610083565b60405190151581526020015b60405180910390f35b61007661007136600461043f565b6100ba565b60405161005a9190610510565b60006001600160e01b031982166358f8699f60e01b14806100b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60608160006100ca8260016105ad565b9050806001600160401b038111156100e4576100e46105c0565b60405190808252806020026020018201604052801561012957816020015b60408051808201909152606080825260208201528152602001906001900390816101025790505b50925060005b8281101561018957858582818110610149576101496105d6565b905060200281019061015b91906105ec565b61016490610698565b848281518110610176576101766105d6565b602090810291909101015260010161012f565b506040516331a9108f60e11b8152600481018790526000906001600160a01b03891690636352211e90602401602060405180830381865afa1580156101d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f6919061071d565b60408051608081018252600a918101918252693a37b5b2b727bbb732b960b11b6060820152908152909150602081016102376001600160a01b038416610262565b81525084848151811061024c5761024c6105d6565b6020026020010181905250505050949350505050565b60606100b46001600160a01b0383166014606082600061028384600261073a565b61028e9060026105ad565b6001600160401b038111156102a5576102a56105c0565b6040519080825280601f01601f1916602001820160405280156102cf576020820181803683370190505b509050600360fc1b816000815181106102ea576102ea6105d6565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610319576103196105d6565b60200101906001600160f81b031916908160001a905350600061033d85600261073a565b6103489060016105ad565b90505b60018111156103c0576f181899199a1a9b1b9c1cb0b131b232b360811b83600f166010811061037c5761037c6105d6565b1a60f81b828281518110610392576103926105d6565b60200101906001600160f81b031916908160001a90535060049290921c916103b981610751565b905061034b565b5081156103ee5760405163e22e27eb60e01b8152600481018690526024810185905260440160405180910390fd5b949350505050565b60006020828403121561040857600080fd5b81356001600160e01b03198116811461042057600080fd5b9392505050565b6001600160a01b038116811461043c57600080fd5b50565b6000806000806060858703121561045557600080fd5b843561046081610427565b93506020850135925060408501356001600160401b038082111561048357600080fd5b818701915087601f83011261049757600080fd5b8135818111156104a657600080fd5b8860208260051b85010111156104bb57600080fd5b95989497505060200194505050565b6000815180845260005b818110156104f0576020818501810151868301820152016104d4565b506000602082860101526020601f19601f83011685010191505092915050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b8381101561058957888303603f190185528151805187855261055d888601826104ca565b91890151858303868b015291905061057581836104ca565b968901969450505090860190600101610539565b509098975050505050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156100b4576100b4610597565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e1983360301811261060257600080fd5b9190910192915050565b600082601f83011261061d57600080fd5b81356001600160401b0380821115610637576106376105c0565b604051601f8301601f19908116603f0116810190828211818310171561065f5761065f6105c0565b8160405283815286602085880101111561067857600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000604082360312156106aa57600080fd5b604080519081016001600160401b0380821183831017156106cd576106cd6105c0565b8160405284359150808211156106e257600080fd5b6106ee3683870161060c565b8352602085013591508082111561070457600080fd5b506107113682860161060c565b60208301525092915050565b60006020828403121561072f57600080fd5b815161042081610427565b80820281158282048414176100b4576100b4610597565b60008161076057610760610597565b50600019019056fea26469706673582212207ac953db0f329b64d5d585c2157b04ffed40f50a9a3d45ad35eb3e33ba6733e764736f6c63430008160033",
95
+ "bytecode": "0x608060405234801561001057600080fd5b5061079e806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806301ffc9a71461003b57806358f8699f14610063575b600080fd5b61004e6100493660046103f6565b610083565b60405190151581526020015b60405180910390f35b61007661007136600461043f565b6100ba565b60405161005a9190610510565b60006001600160e01b031982166358f8699f60e01b14806100b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60608160006100ca8260016105ad565b9050806001600160401b038111156100e4576100e46105c0565b60405190808252806020026020018201604052801561012957816020015b60408051808201909152606080825260208201528152602001906001900390816101025790505b50925060005b8281101561018957858582818110610149576101496105d6565b905060200281019061015b91906105ec565b61016490610698565b848281518110610176576101766105d6565b602090810291909101015260010161012f565b506040516331a9108f60e11b8152600481018790526000906001600160a01b03891690636352211e90602401602060405180830381865afa1580156101d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f6919061071d565b60408051608081018252600a918101918252693a37b5b2b727bbb732b960b11b6060820152908152909150602081016102376001600160a01b038416610262565b81525084848151811061024c5761024c6105d6565b6020026020010181905250505050949350505050565b60606100b46001600160a01b0383166014606082600061028384600261073a565b61028e9060026105ad565b6001600160401b038111156102a5576102a56105c0565b6040519080825280601f01601f1916602001820160405280156102cf576020820181803683370190505b509050600360fc1b816000815181106102ea576102ea6105d6565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610319576103196105d6565b60200101906001600160f81b031916908160001a905350600061033d85600261073a565b6103489060016105ad565b90505b60018111156103c0576f181899199a1a9b1b9c1cb0b131b232b360811b83600f166010811061037c5761037c6105d6565b1a60f81b828281518110610392576103926105d6565b60200101906001600160f81b031916908160001a90535060049290921c916103b981610751565b905061034b565b5081156103ee5760405163e22e27eb60e01b8152600481018690526024810185905260440160405180910390fd5b949350505050565b60006020828403121561040857600080fd5b81356001600160e01b03198116811461042057600080fd5b9392505050565b6001600160a01b038116811461043c57600080fd5b50565b6000806000806060858703121561045557600080fd5b843561046081610427565b93506020850135925060408501356001600160401b038082111561048357600080fd5b818701915087601f83011261049757600080fd5b8135818111156104a657600080fd5b8860208260051b85010111156104bb57600080fd5b95989497505060200194505050565b6000815180845260005b818110156104f0576020818501810151868301820152016104d4565b506000602082860101526020601f19601f83011685010191505092915050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b8381101561058957888303603f190185528151805187855261055d888601826104ca565b91890151858303868b015291905061057581836104ca565b968901969450505090860190600101610539565b509098975050505050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156100b4576100b4610597565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e1983360301811261060257600080fd5b9190910192915050565b600082601f83011261061d57600080fd5b81356001600160401b0380821115610637576106376105c0565b604051601f8301601f19908116603f0116810190828211818310171561065f5761065f6105c0565b8160405283815286602085880101111561067857600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000604082360312156106aa57600080fd5b604080519081016001600160401b0380821183831017156106cd576106cd6105c0565b8160405284359150808211156106e257600080fd5b6106ee3683870161060c565b8352602085013591508082111561070457600080fd5b506107113682860161060c565b60208301525092915050565b60006020828403121561072f57600080fd5b815161042081610427565b80820281158282048414176100b4576100b4610597565b60008161076057610760610597565b50600019019056fea2646970667358221220989bbaf0d71e9303cd2cf70dde8246d68293309e12fa0d39576b572cd922092d64736f6c63430008160033",
96
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c806301ffc9a71461003b57806358f8699f14610063575b600080fd5b61004e6100493660046103f6565b610083565b60405190151581526020015b60405180910390f35b61007661007136600461043f565b6100ba565b60405161005a9190610510565b60006001600160e01b031982166358f8699f60e01b14806100b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60608160006100ca8260016105ad565b9050806001600160401b038111156100e4576100e46105c0565b60405190808252806020026020018201604052801561012957816020015b60408051808201909152606080825260208201528152602001906001900390816101025790505b50925060005b8281101561018957858582818110610149576101496105d6565b905060200281019061015b91906105ec565b61016490610698565b848281518110610176576101766105d6565b602090810291909101015260010161012f565b506040516331a9108f60e11b8152600481018790526000906001600160a01b03891690636352211e90602401602060405180830381865afa1580156101d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f6919061071d565b60408051608081018252600a918101918252693a37b5b2b727bbb732b960b11b6060820152908152909150602081016102376001600160a01b038416610262565b81525084848151811061024c5761024c6105d6565b6020026020010181905250505050949350505050565b60606100b46001600160a01b0383166014606082600061028384600261073a565b61028e9060026105ad565b6001600160401b038111156102a5576102a56105c0565b6040519080825280601f01601f1916602001820160405280156102cf576020820181803683370190505b509050600360fc1b816000815181106102ea576102ea6105d6565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610319576103196105d6565b60200101906001600160f81b031916908160001a905350600061033d85600261073a565b6103489060016105ad565b90505b60018111156103c0576f181899199a1a9b1b9c1cb0b131b232b360811b83600f166010811061037c5761037c6105d6565b1a60f81b828281518110610392576103926105d6565b60200101906001600160f81b031916908160001a90535060049290921c916103b981610751565b905061034b565b5081156103ee5760405163e22e27eb60e01b8152600481018690526024810185905260440160405180910390fd5b949350505050565b60006020828403121561040857600080fd5b81356001600160e01b03198116811461042057600080fd5b9392505050565b6001600160a01b038116811461043c57600080fd5b50565b6000806000806060858703121561045557600080fd5b843561046081610427565b93506020850135925060408501356001600160401b038082111561048357600080fd5b818701915087601f83011261049757600080fd5b8135818111156104a657600080fd5b8860208260051b85010111156104bb57600080fd5b95989497505060200194505050565b6000815180845260005b818110156104f0576020818501810151868301820152016104d4565b506000602082860101526020601f19601f83011685010191505092915050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b8381101561058957888303603f190185528151805187855261055d888601826104ca565b91890151858303868b015291905061057581836104ca565b968901969450505090860190600101610539565b509098975050505050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156100b4576100b4610597565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e1983360301811261060257600080fd5b9190910192915050565b600082601f83011261061d57600080fd5b81356001600160401b0380821115610637576106376105c0565b604051601f8301601f19908116603f0116810190828211818310171561065f5761065f6105c0565b8160405283815286602085880101111561067857600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000604082360312156106aa57600080fd5b604080519081016001600160401b0380821183831017156106cd576106cd6105c0565b8160405284359150808211156106e257600080fd5b6106ee3683870161060c565b8352602085013591508082111561070457600080fd5b506107113682860161060c565b60208301525092915050565b60006020828403121561072f57600080fd5b815161042081610427565b80820281158282048414176100b4576100b4610597565b60008161076057610760610597565b50600019019056fea2646970667358221220989bbaf0d71e9303cd2cf70dde8246d68293309e12fa0d39576b572cd922092d64736f6c63430008160033",
97
97
  "linkReferences": {},
98
98
  "deployedLinkReferences": {}
99
99
  }
@@ -76,8 +76,8 @@
76
76
  "type": "function"
77
77
  }
78
78
  ],
79
- "bytecode": "0x608060405234801561001057600080fd5b5061074a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806301ffc9a71461003b57806358f8699f14610063575b600080fd5b61004e6100493660046103d8565b610083565b60405190151581526020015b60405180910390f35b610076610071366004610421565b6100ba565b60405161005a91906104f2565b60006001600160e01b031982166358f8699f60e01b14806100b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60608160006100ca826001610579565b9050806001600160401b038111156100e4576100e461059a565b60405190808252806020026020018201604052801561012957816020015b60408051808201909152606080825260208201528152602001906001900390816101025790505b50925060005b8281101561018957858582818110610149576101496105b0565b905060200281019061015b91906105c6565b61016490610672565b848281518110610176576101766105b0565b602090810291909101015260010161012f565b506040516331a9108f60e11b8152600481018790526000906001600160a01b03891690636352211e90602401602060405180830381865afa1580156101d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f691906106f7565b60408051608081018252601491810191825273746f6b656e4f776e657245746842616c616e636560601b60608201529081529091506001600160a01b03821631906020810161024483610270565b815250858581518110610259576102596105b0565b602002602001018190525050505050949350505050565b6060600061027d83610302565b60010190506000816001600160401b0381111561029c5761029c61059a565b6040519080825280601f01601f1916602001820160405280156102c6576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846102d057509392505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106103415772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b831061036b576904ee2d6d415b85acef8160201b830492506020015b662386f26fc10000831061038957662386f26fc10000830492506010015b6305f5e10083106103a1576305f5e100830492506008015b61271083106103b557612710830492506004015b606483106103c7576064830492506002015b600a83106100b45760010192915050565b6000602082840312156103ea57600080fd5b81356001600160e01b03198116811461040257600080fd5b9392505050565b6001600160a01b038116811461041e57600080fd5b50565b6000806000806060858703121561043757600080fd5b843561044281610409565b93506020850135925060408501356001600160401b038082111561046557600080fd5b818701915087601f83011261047957600080fd5b81358181111561048857600080fd5b8860208260051b850101111561049d57600080fd5b95989497505060200194505050565b6000815180845260005b818110156104d2576020818501810151868301820152016104b6565b506000602082860101526020601f19601f83011685010191505092915050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b8381101561056b57888303603f190185528151805187855261053f888601826104ac565b91890151858303868b015291905061055781836104ac565b96890196945050509086019060010161051b565b509098975050505050505050565b808201808211156100b457634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e198336030181126105dc57600080fd5b9190910192915050565b600082601f8301126105f757600080fd5b81356001600160401b03808211156106115761061161059a565b604051601f8301601f19908116603f011681019082821181831017156106395761063961059a565b8160405283815286602085880101111561065257600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006040823603121561068457600080fd5b604080519081016001600160401b0380821183831017156106a7576106a761059a565b8160405284359150808211156106bc57600080fd5b6106c8368387016105e6565b835260208501359150808211156106de57600080fd5b506106eb368286016105e6565b60208301525092915050565b60006020828403121561070957600080fd5b81516104028161040956fea264697066735822122024007b1dde4f95a0af9c7a2342f71216358f7002be677dbda91156787a9f38cd64736f6c63430008160033",
80
- "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c806301ffc9a71461003b57806358f8699f14610063575b600080fd5b61004e6100493660046103d8565b610083565b60405190151581526020015b60405180910390f35b610076610071366004610421565b6100ba565b60405161005a91906104f2565b60006001600160e01b031982166358f8699f60e01b14806100b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60608160006100ca826001610579565b9050806001600160401b038111156100e4576100e461059a565b60405190808252806020026020018201604052801561012957816020015b60408051808201909152606080825260208201528152602001906001900390816101025790505b50925060005b8281101561018957858582818110610149576101496105b0565b905060200281019061015b91906105c6565b61016490610672565b848281518110610176576101766105b0565b602090810291909101015260010161012f565b506040516331a9108f60e11b8152600481018790526000906001600160a01b03891690636352211e90602401602060405180830381865afa1580156101d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f691906106f7565b60408051608081018252601491810191825273746f6b656e4f776e657245746842616c616e636560601b60608201529081529091506001600160a01b03821631906020810161024483610270565b815250858581518110610259576102596105b0565b602002602001018190525050505050949350505050565b6060600061027d83610302565b60010190506000816001600160401b0381111561029c5761029c61059a565b6040519080825280601f01601f1916602001820160405280156102c6576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846102d057509392505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106103415772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b831061036b576904ee2d6d415b85acef8160201b830492506020015b662386f26fc10000831061038957662386f26fc10000830492506010015b6305f5e10083106103a1576305f5e100830492506008015b61271083106103b557612710830492506004015b606483106103c7576064830492506002015b600a83106100b45760010192915050565b6000602082840312156103ea57600080fd5b81356001600160e01b03198116811461040257600080fd5b9392505050565b6001600160a01b038116811461041e57600080fd5b50565b6000806000806060858703121561043757600080fd5b843561044281610409565b93506020850135925060408501356001600160401b038082111561046557600080fd5b818701915087601f83011261047957600080fd5b81358181111561048857600080fd5b8860208260051b850101111561049d57600080fd5b95989497505060200194505050565b6000815180845260005b818110156104d2576020818501810151868301820152016104b6565b506000602082860101526020601f19601f83011685010191505092915050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b8381101561056b57888303603f190185528151805187855261053f888601826104ac565b91890151858303868b015291905061055781836104ac565b96890196945050509086019060010161051b565b509098975050505050505050565b808201808211156100b457634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e198336030181126105dc57600080fd5b9190910192915050565b600082601f8301126105f757600080fd5b81356001600160401b03808211156106115761061161059a565b604051601f8301601f19908116603f011681019082821181831017156106395761063961059a565b8160405283815286602085880101111561065257600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006040823603121561068457600080fd5b604080519081016001600160401b0380821183831017156106a7576106a761059a565b8160405284359150808211156106bc57600080fd5b6106c8368387016105e6565b835260208501359150808211156106de57600080fd5b506106eb368286016105e6565b60208301525092915050565b60006020828403121561070957600080fd5b81516104028161040956fea264697066735822122024007b1dde4f95a0af9c7a2342f71216358f7002be677dbda91156787a9f38cd64736f6c63430008160033",
79
+ "bytecode": "0x608060405234801561001057600080fd5b5061074a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806301ffc9a71461003b57806358f8699f14610063575b600080fd5b61004e6100493660046103d8565b610083565b60405190151581526020015b60405180910390f35b610076610071366004610421565b6100ba565b60405161005a91906104f2565b60006001600160e01b031982166358f8699f60e01b14806100b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60608160006100ca826001610579565b9050806001600160401b038111156100e4576100e461059a565b60405190808252806020026020018201604052801561012957816020015b60408051808201909152606080825260208201528152602001906001900390816101025790505b50925060005b8281101561018957858582818110610149576101496105b0565b905060200281019061015b91906105c6565b61016490610672565b848281518110610176576101766105b0565b602090810291909101015260010161012f565b506040516331a9108f60e11b8152600481018790526000906001600160a01b03891690636352211e90602401602060405180830381865afa1580156101d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f691906106f7565b60408051608081018252601491810191825273746f6b656e4f776e657245746842616c616e636560601b60608201529081529091506001600160a01b03821631906020810161024483610270565b815250858581518110610259576102596105b0565b602002602001018190525050505050949350505050565b6060600061027d83610302565b60010190506000816001600160401b0381111561029c5761029c61059a565b6040519080825280601f01601f1916602001820160405280156102c6576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846102d057509392505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106103415772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b831061036b576904ee2d6d415b85acef8160201b830492506020015b662386f26fc10000831061038957662386f26fc10000830492506010015b6305f5e10083106103a1576305f5e100830492506008015b61271083106103b557612710830492506004015b606483106103c7576064830492506002015b600a83106100b45760010192915050565b6000602082840312156103ea57600080fd5b81356001600160e01b03198116811461040257600080fd5b9392505050565b6001600160a01b038116811461041e57600080fd5b50565b6000806000806060858703121561043757600080fd5b843561044281610409565b93506020850135925060408501356001600160401b038082111561046557600080fd5b818701915087601f83011261047957600080fd5b81358181111561048857600080fd5b8860208260051b850101111561049d57600080fd5b95989497505060200194505050565b6000815180845260005b818110156104d2576020818501810151868301820152016104b6565b506000602082860101526020601f19601f83011685010191505092915050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b8381101561056b57888303603f190185528151805187855261053f888601826104ac565b91890151858303868b015291905061055781836104ac565b96890196945050509086019060010161051b565b509098975050505050505050565b808201808211156100b457634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e198336030181126105dc57600080fd5b9190910192915050565b600082601f8301126105f757600080fd5b81356001600160401b03808211156106115761061161059a565b604051601f8301601f19908116603f011681019082821181831017156106395761063961059a565b8160405283815286602085880101111561065257600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006040823603121561068457600080fd5b604080519081016001600160401b0380821183831017156106a7576106a761059a565b8160405284359150808211156106bc57600080fd5b6106c8368387016105e6565b835260208501359150808211156106de57600080fd5b506106eb368286016105e6565b60208301525092915050565b60006020828403121561070957600080fd5b81516104028161040956fea26469706673582212208e2049b3dfe651fb9ababa29297f99dd6042e35ae9ffa3573ad7ffe01bdd272d64736f6c63430008160033",
80
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c806301ffc9a71461003b57806358f8699f14610063575b600080fd5b61004e6100493660046103d8565b610083565b60405190151581526020015b60405180910390f35b610076610071366004610421565b6100ba565b60405161005a91906104f2565b60006001600160e01b031982166358f8699f60e01b14806100b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60608160006100ca826001610579565b9050806001600160401b038111156100e4576100e461059a565b60405190808252806020026020018201604052801561012957816020015b60408051808201909152606080825260208201528152602001906001900390816101025790505b50925060005b8281101561018957858582818110610149576101496105b0565b905060200281019061015b91906105c6565b61016490610672565b848281518110610176576101766105b0565b602090810291909101015260010161012f565b506040516331a9108f60e11b8152600481018790526000906001600160a01b03891690636352211e90602401602060405180830381865afa1580156101d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f691906106f7565b60408051608081018252601491810191825273746f6b656e4f776e657245746842616c616e636560601b60608201529081529091506001600160a01b03821631906020810161024483610270565b815250858581518110610259576102596105b0565b602002602001018190525050505050949350505050565b6060600061027d83610302565b60010190506000816001600160401b0381111561029c5761029c61059a565b6040519080825280601f01601f1916602001820160405280156102c6576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846102d057509392505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106103415772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b831061036b576904ee2d6d415b85acef8160201b830492506020015b662386f26fc10000831061038957662386f26fc10000830492506010015b6305f5e10083106103a1576305f5e100830492506008015b61271083106103b557612710830492506004015b606483106103c7576064830492506002015b600a83106100b45760010192915050565b6000602082840312156103ea57600080fd5b81356001600160e01b03198116811461040257600080fd5b9392505050565b6001600160a01b038116811461041e57600080fd5b50565b6000806000806060858703121561043757600080fd5b843561044281610409565b93506020850135925060408501356001600160401b038082111561046557600080fd5b818701915087601f83011261047957600080fd5b81358181111561048857600080fd5b8860208260051b850101111561049d57600080fd5b95989497505060200194505050565b6000815180845260005b818110156104d2576020818501810151868301820152016104b6565b506000602082860101526020601f19601f83011685010191505092915050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b8381101561056b57888303603f190185528151805187855261053f888601826104ac565b91890151858303868b015291905061055781836104ac565b96890196945050509086019060010161051b565b509098975050505050505050565b808201808211156100b457634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e198336030181126105dc57600080fd5b9190910192915050565b600082601f8301126105f757600080fd5b81356001600160401b03808211156106115761061161059a565b604051601f8301601f19908116603f011681019082821181831017156106395761063961059a565b8160405283815286602085880101111561065257600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006040823603121561068457600080fd5b604080519081016001600160401b0380821183831017156106a7576106a761059a565b8160405284359150808211156106bc57600080fd5b6106c8368387016105e6565b835260208501359150808211156106de57600080fd5b506106eb368286016105e6565b60208301525092915050565b60006020828403121561070957600080fd5b81516104028161040956fea26469706673582212208e2049b3dfe651fb9ababa29297f99dd6042e35ae9ffa3573ad7ffe01bdd272d64736f6c63430008160033",
81
81
  "linkReferences": {},
82
82
  "deployedLinkReferences": {}
83
83
  }
@@ -100,8 +100,8 @@
100
100
  "type": "function"
101
101
  }
102
102
  ],
103
- "bytecode": "0x60a060405234801561001057600080fd5b5060405161081b38038061081b83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b60805161078a61009160003960008181607301526101d8015261078a6000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806301ffc9a71461004657806302d454571461006e57806358f8699f146100ad575b600080fd5b610059610054366004610428565b6100cd565b60405190151581526020015b60405180910390f35b6100957f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610065565b6100c06100bb366004610459565b610104565b6040516100659190610536565b60006001600160e01b031982166358f8699f60e01b14806100fe57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60608160006101148260016105bd565b9050806001600160401b0381111561012e5761012e6105de565b60405190808252806020026020018201604052801561017357816020015b604080518082019091526060808252602082015281526020019060019003908161014c5790505b50925060005b828110156101d357858582818110610193576101936105f4565b90506020028101906101a5919061060a565b6101ae906106b6565b8482815181106101c0576101c06105f4565b6020908102919091010152600101610179565b5060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610234573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610258919061073b565b60408051608081018252600f9181019182526e746f74616c537570706c795553444360881b606082015290815290915060208101610295836102c0565b8152508484815181106102aa576102aa6105f4565b6020026020010181905250505050949350505050565b606060006102cd83610352565b60010190506000816001600160401b038111156102ec576102ec6105de565b6040519080825280601f01601f191660200182016040528015610316576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461032057509392505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106103915772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b83106103bb576904ee2d6d415b85acef8160201b830492506020015b662386f26fc1000083106103d957662386f26fc10000830492506010015b6305f5e10083106103f1576305f5e100830492506008015b612710831061040557612710830492506004015b60648310610417576064830492506002015b600a83106100fe5760010192915050565b60006020828403121561043a57600080fd5b81356001600160e01b03198116811461045257600080fd5b9392505050565b6000806000806060858703121561046f57600080fd5b84356001600160a01b038116811461048657600080fd5b93506020850135925060408501356001600160401b03808211156104a957600080fd5b818701915087601f8301126104bd57600080fd5b8135818111156104cc57600080fd5b8860208260051b85010111156104e157600080fd5b95989497505060200194505050565b6000815180845260005b81811015610516576020818501810151868301820152016104fa565b506000602082860101526020601f19601f83011685010191505092915050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156105af57888303603f1901855281518051878552610583888601826104f0565b91890151858303868b015291905061059b81836104f0565b96890196945050509086019060010161055f565b509098975050505050505050565b808201808211156100fe57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e1983360301811261062057600080fd5b9190910192915050565b600082601f83011261063b57600080fd5b81356001600160401b0380821115610655576106556105de565b604051601f8301601f19908116603f0116810190828211818310171561067d5761067d6105de565b8160405283815286602085880101111561069657600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000604082360312156106c857600080fd5b604080519081016001600160401b0380821183831017156106eb576106eb6105de565b81604052843591508082111561070057600080fd5b61070c3683870161062a565b8352602085013591508082111561072257600080fd5b5061072f3682860161062a565b60208301525092915050565b60006020828403121561074d57600080fd5b505191905056fea2646970667358221220a8c840cd91d30901d6dde99d5e0e975e64060860bedef94af2bc9176d6bac82d64736f6c63430008160033",
104
- "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c806301ffc9a71461004657806302d454571461006e57806358f8699f146100ad575b600080fd5b610059610054366004610428565b6100cd565b60405190151581526020015b60405180910390f35b6100957f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610065565b6100c06100bb366004610459565b610104565b6040516100659190610536565b60006001600160e01b031982166358f8699f60e01b14806100fe57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60608160006101148260016105bd565b9050806001600160401b0381111561012e5761012e6105de565b60405190808252806020026020018201604052801561017357816020015b604080518082019091526060808252602082015281526020019060019003908161014c5790505b50925060005b828110156101d357858582818110610193576101936105f4565b90506020028101906101a5919061060a565b6101ae906106b6565b8482815181106101c0576101c06105f4565b6020908102919091010152600101610179565b5060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610234573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610258919061073b565b60408051608081018252600f9181019182526e746f74616c537570706c795553444360881b606082015290815290915060208101610295836102c0565b8152508484815181106102aa576102aa6105f4565b6020026020010181905250505050949350505050565b606060006102cd83610352565b60010190506000816001600160401b038111156102ec576102ec6105de565b6040519080825280601f01601f191660200182016040528015610316576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461032057509392505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106103915772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b83106103bb576904ee2d6d415b85acef8160201b830492506020015b662386f26fc1000083106103d957662386f26fc10000830492506010015b6305f5e10083106103f1576305f5e100830492506008015b612710831061040557612710830492506004015b60648310610417576064830492506002015b600a83106100fe5760010192915050565b60006020828403121561043a57600080fd5b81356001600160e01b03198116811461045257600080fd5b9392505050565b6000806000806060858703121561046f57600080fd5b84356001600160a01b038116811461048657600080fd5b93506020850135925060408501356001600160401b03808211156104a957600080fd5b818701915087601f8301126104bd57600080fd5b8135818111156104cc57600080fd5b8860208260051b85010111156104e157600080fd5b95989497505060200194505050565b6000815180845260005b81811015610516576020818501810151868301820152016104fa565b506000602082860101526020601f19601f83011685010191505092915050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156105af57888303603f1901855281518051878552610583888601826104f0565b91890151858303868b015291905061059b81836104f0565b96890196945050509086019060010161055f565b509098975050505050505050565b808201808211156100fe57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e1983360301811261062057600080fd5b9190910192915050565b600082601f83011261063b57600080fd5b81356001600160401b0380821115610655576106556105de565b604051601f8301601f19908116603f0116810190828211818310171561067d5761067d6105de565b8160405283815286602085880101111561069657600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000604082360312156106c857600080fd5b604080519081016001600160401b0380821183831017156106eb576106eb6105de565b81604052843591508082111561070057600080fd5b61070c3683870161062a565b8352602085013591508082111561072257600080fd5b5061072f3682860161062a565b60208301525092915050565b60006020828403121561074d57600080fd5b505191905056fea2646970667358221220a8c840cd91d30901d6dde99d5e0e975e64060860bedef94af2bc9176d6bac82d64736f6c63430008160033",
103
+ "bytecode": "0x60a060405234801561001057600080fd5b5060405161081b38038061081b83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b60805161078a61009160003960008181607301526101d8015261078a6000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806301ffc9a71461004657806302d454571461006e57806358f8699f146100ad575b600080fd5b610059610054366004610428565b6100cd565b60405190151581526020015b60405180910390f35b6100957f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610065565b6100c06100bb366004610459565b610104565b6040516100659190610536565b60006001600160e01b031982166358f8699f60e01b14806100fe57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60608160006101148260016105bd565b9050806001600160401b0381111561012e5761012e6105de565b60405190808252806020026020018201604052801561017357816020015b604080518082019091526060808252602082015281526020019060019003908161014c5790505b50925060005b828110156101d357858582818110610193576101936105f4565b90506020028101906101a5919061060a565b6101ae906106b6565b8482815181106101c0576101c06105f4565b6020908102919091010152600101610179565b5060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610234573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610258919061073b565b60408051608081018252600f9181019182526e746f74616c537570706c795553444360881b606082015290815290915060208101610295836102c0565b8152508484815181106102aa576102aa6105f4565b6020026020010181905250505050949350505050565b606060006102cd83610352565b60010190506000816001600160401b038111156102ec576102ec6105de565b6040519080825280601f01601f191660200182016040528015610316576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461032057509392505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106103915772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b83106103bb576904ee2d6d415b85acef8160201b830492506020015b662386f26fc1000083106103d957662386f26fc10000830492506010015b6305f5e10083106103f1576305f5e100830492506008015b612710831061040557612710830492506004015b60648310610417576064830492506002015b600a83106100fe5760010192915050565b60006020828403121561043a57600080fd5b81356001600160e01b03198116811461045257600080fd5b9392505050565b6000806000806060858703121561046f57600080fd5b84356001600160a01b038116811461048657600080fd5b93506020850135925060408501356001600160401b03808211156104a957600080fd5b818701915087601f8301126104bd57600080fd5b8135818111156104cc57600080fd5b8860208260051b85010111156104e157600080fd5b95989497505060200194505050565b6000815180845260005b81811015610516576020818501810151868301820152016104fa565b506000602082860101526020601f19601f83011685010191505092915050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156105af57888303603f1901855281518051878552610583888601826104f0565b91890151858303868b015291905061059b81836104f0565b96890196945050509086019060010161055f565b509098975050505050505050565b808201808211156100fe57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e1983360301811261062057600080fd5b9190910192915050565b600082601f83011261063b57600080fd5b81356001600160401b0380821115610655576106556105de565b604051601f8301601f19908116603f0116810190828211818310171561067d5761067d6105de565b8160405283815286602085880101111561069657600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000604082360312156106c857600080fd5b604080519081016001600160401b0380821183831017156106eb576106eb6105de565b81604052843591508082111561070057600080fd5b61070c3683870161062a565b8352602085013591508082111561072257600080fd5b5061072f3682860161062a565b60208301525092915050565b60006020828403121561074d57600080fd5b505191905056fea2646970667358221220d07a0875284d6c6d447bc6f792c447865ebc79e45739f04ba66749ab689be7df64736f6c63430008160033",
104
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c806301ffc9a71461004657806302d454571461006e57806358f8699f146100ad575b600080fd5b610059610054366004610428565b6100cd565b60405190151581526020015b60405180910390f35b6100957f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610065565b6100c06100bb366004610459565b610104565b6040516100659190610536565b60006001600160e01b031982166358f8699f60e01b14806100fe57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60608160006101148260016105bd565b9050806001600160401b0381111561012e5761012e6105de565b60405190808252806020026020018201604052801561017357816020015b604080518082019091526060808252602082015281526020019060019003908161014c5790505b50925060005b828110156101d357858582818110610193576101936105f4565b90506020028101906101a5919061060a565b6101ae906106b6565b8482815181106101c0576101c06105f4565b6020908102919091010152600101610179565b5060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610234573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610258919061073b565b60408051608081018252600f9181019182526e746f74616c537570706c795553444360881b606082015290815290915060208101610295836102c0565b8152508484815181106102aa576102aa6105f4565b6020026020010181905250505050949350505050565b606060006102cd83610352565b60010190506000816001600160401b038111156102ec576102ec6105de565b6040519080825280601f01601f191660200182016040528015610316576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461032057509392505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106103915772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b83106103bb576904ee2d6d415b85acef8160201b830492506020015b662386f26fc1000083106103d957662386f26fc10000830492506010015b6305f5e10083106103f1576305f5e100830492506008015b612710831061040557612710830492506004015b60648310610417576064830492506002015b600a83106100fe5760010192915050565b60006020828403121561043a57600080fd5b81356001600160e01b03198116811461045257600080fd5b9392505050565b6000806000806060858703121561046f57600080fd5b84356001600160a01b038116811461048657600080fd5b93506020850135925060408501356001600160401b03808211156104a957600080fd5b818701915087601f8301126104bd57600080fd5b8135818111156104cc57600080fd5b8860208260051b85010111156104e157600080fd5b95989497505060200194505050565b6000815180845260005b81811015610516576020818501810151868301820152016104fa565b506000602082860101526020601f19601f83011685010191505092915050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156105af57888303603f1901855281518051878552610583888601826104f0565b91890151858303868b015291905061059b81836104f0565b96890196945050509086019060010161055f565b509098975050505050505050565b808201808211156100fe57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e1983360301811261062057600080fd5b9190910192915050565b600082601f83011261063b57600080fd5b81356001600160401b0380821115610655576106556105de565b604051601f8301601f19908116603f0116810190828211818310171561067d5761067d6105de565b8160405283815286602085880101111561069657600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000604082360312156106c857600080fd5b604080519081016001600160401b0380821183831017156106eb576106eb6105de565b81604052843591508082111561070057600080fd5b61070c3683870161062a565b8352602085013591508082111561072257600080fd5b5061072f3682860161062a565b60208301525092915050565b60006020828403121561074d57600080fd5b505191905056fea2646970667358221220d07a0875284d6c6d447bc6f792c447865ebc79e45739f04ba66749ab689be7df64736f6c63430008160033",
105
105
  "linkReferences": {},
106
106
  "deployedLinkReferences": {}
107
107
  }
@@ -52,11 +52,13 @@ interface IPMPV0 is IWeb3Call {
52
52
  * @param coreContract The address of the core contract.
53
53
  * @param tokenId The token ID for which parameters were configured.
54
54
  * @param pmpInputs Array of parameter inputs that were configured.
55
+ * @param authAddresses Array of addresses that authenticated the parameters. Aligned by index with pmpInputs.
55
56
  */
56
57
  event TokenParamsConfigured(
57
58
  address coreContract,
58
59
  uint256 tokenId,
59
- PMPInput[] pmpInputs
60
+ PMPInput[] pmpInputs,
61
+ address[] authAddresses
60
62
  );
61
63
 
62
64
  /**
@@ -213,12 +215,12 @@ interface IPMPV0 is IWeb3Call {
213
215
  * @param wallet The wallet address to check.
214
216
  * @param coreContract The address of the core contract to call.
215
217
  * @param tokenId The tokenId of the token to check.
216
- * @return isTokenOwnerOrDelegate True if the wallet is the owner or a delegate of the token,
218
+ * @return isTokenOwnerOrDelegate_ True if the wallet is the owner or a delegate of the token,
217
219
  * false otherwise.
218
220
  */
219
221
  function isTokenOwnerOrDelegate(
220
222
  address wallet,
221
223
  address coreContract,
222
224
  uint256 tokenId
223
- ) external view returns (bool);
225
+ ) external view returns (bool isTokenOwnerOrDelegate_);
224
226
  }
@@ -15,7 +15,7 @@ import {SSTORE2} from "./SSTORE2.sol"; // Import SSTORE2 library
15
15
  library ImmutableStringArray {
16
16
  /**
17
17
  * @notice Struct to store the SSTORE2 pointer to the packed string array.
18
- * @dev dataPointer is the SSTORE2 pointer to the packed string array.
18
+ * @dev dataPointer is the SSTORE2 pointer to the packed string array. Assigned to address(0) if the array is empty.
19
19
  */
20
20
  struct StringArray {
21
21
  address dataPointer; // SSTORE2 pointer storing length + packed offsets + packed string data
@@ -24,6 +24,7 @@ library ImmutableStringArray {
24
24
  /**
25
25
  * @notice Stores a packed immutable string array using a single SSTORE2 contract.
26
26
  * Allows overwriting the pointer to point to a new immutable array.
27
+ * @dev Optimized for the case where the array is empty by assigning the dataPointer to address(0).
27
28
  * @param storageArray The storage reference to store the packed array.
28
29
  * @param strings The array of strings to pack.
29
30
  */
@@ -32,6 +33,12 @@ library ImmutableStringArray {
32
33
  string[] memory strings
33
34
  ) internal {
34
35
  uint256 arrayLength = strings.length;
36
+ // edge case - empty array
37
+ if (arrayLength == 0) {
38
+ storageArray.dataPointer = address(0);
39
+ return;
40
+ }
41
+
35
42
  uint64[] memory offsets = new uint64[](arrayLength);
36
43
 
37
44
  // compute total bytes length and offsets (ensuring no overflow)
@@ -126,6 +133,11 @@ library ImmutableStringArray {
126
133
  function length(
127
134
  StringArray storage storageArray
128
135
  ) internal view returns (uint256 count) {
136
+ // edge case - unassigned dataPointer or empty array
137
+ if (storageArray.dataPointer == address(0)) {
138
+ return 0;
139
+ }
140
+
129
141
  // @dev this could be more efficient by only reading the first 8 bytes of the SSTORE2 contract
130
142
  // but prefer to keep simple
131
143
  bytes memory allData = SSTORE2.read(storageArray.dataPointer);
@@ -145,7 +157,7 @@ library ImmutableStringArray {
145
157
  StringArray storage storageArray,
146
158
  uint256 index
147
159
  ) internal view returns (string memory result) {
148
- // edge case - unassigned dataPointer
160
+ // edge case - unassigned dataPointer or empty array
149
161
  if (storageArray.dataPointer == address(0)) {
150
162
  revert("Index out of bounds");
151
163
  }
@@ -213,7 +225,7 @@ library ImmutableStringArray {
213
225
  function getAll(
214
226
  StringArray storage storageArray
215
227
  ) internal view returns (string[] memory results) {
216
- // edge case - unassigned dataPointer
228
+ // edge case - unassigned dataPointer or empty array
217
229
  if (storageArray.dataPointer == address(0)) {
218
230
  return new string[](0);
219
231
  }
@@ -263,6 +263,7 @@ contract PMPV0 is IPMPV0, Web3Call, ReentrancyGuard {
263
263
  pmpConfigStorage.selectOptionsLength = uint8(
264
264
  inputPMPConfig.selectOptions.length
265
265
  );
266
+ // @dev ImmutableStringArray is optimized for the case where the array is empty.
266
267
  ImmutableStringArray.store(
267
268
  pmpConfigStorage.selectOptions,
268
269
  inputPMPConfig.selectOptions
@@ -311,6 +312,8 @@ contract PMPV0 is IPMPV0, Web3Call, ReentrancyGuard {
311
312
  ProjectConfig storage projectConfig = projectConfigs[coreContract][
312
313
  ABHelpers.tokenIdToProjectId(tokenId)
313
314
  ];
315
+ // preallocate memory for auth addresses of each pmpInput
316
+ address[] memory authAddresses = new address[](pmpInputs.length);
314
317
  // assign each pmpInput to the token
315
318
  // @dev pmpInputs processed sequentially in order of input
316
319
  for (uint256 i = 0; i < pmpInputs.length; i++) {
@@ -321,8 +324,8 @@ contract PMPV0 is IPMPV0, Web3Call, ReentrancyGuard {
321
324
  ];
322
325
  PMPConfigStorage storage pmpConfigStorage = projectConfig
323
326
  .pmpConfigsStorage[pmpKeyHash];
324
- // validate pmpInput
325
- _validatePMPInputAndAuth({
327
+ // validate pmpInput + record the authenticated address used to configure the pmpInput
328
+ authAddresses[i] = _validatePMPInputAndAuth({
326
329
  tokenId: tokenId,
327
330
  coreContract: coreContract,
328
331
  pmpInput: pmpInput,
@@ -359,7 +362,8 @@ contract PMPV0 is IPMPV0, Web3Call, ReentrancyGuard {
359
362
  emit TokenParamsConfigured({
360
363
  coreContract: coreContract,
361
364
  tokenId: tokenId,
362
- pmpInputs: pmpInputs
365
+ pmpInputs: pmpInputs,
366
+ authAddresses: authAddresses
363
367
  });
364
368
  }
365
369
 
@@ -478,20 +482,19 @@ contract PMPV0 is IPMPV0, Web3Call, ReentrancyGuard {
478
482
  * @param wallet The wallet address to check.
479
483
  * @param coreContract The address of the core contract to call.
480
484
  * @param tokenId The tokenId of the token to check.
481
- * @return isTokenOwnerOrDelegate True if the wallet is the owner or a delegate of the token,
485
+ * @return isTokenOwnerOrDelegate_ True if the wallet is the owner or a delegate of the token,
482
486
  * false otherwise.
483
487
  */
484
488
  function isTokenOwnerOrDelegate(
485
489
  address wallet,
486
490
  address coreContract,
487
491
  uint256 tokenId
488
- ) external view returns (bool) {
489
- return
490
- _isTokenOwnerOrDelegate({
491
- tokenId: tokenId,
492
- coreContract: coreContract,
493
- sender: wallet
494
- });
492
+ ) external view returns (bool isTokenOwnerOrDelegate_) {
493
+ (isTokenOwnerOrDelegate_, ) = _isTokenOwnerOrDelegate({
494
+ tokenId: tokenId,
495
+ coreContract: coreContract,
496
+ sender: wallet
497
+ });
495
498
  }
496
499
 
497
500
  /**
@@ -706,6 +709,7 @@ contract PMPV0 is IPMPV0, Web3Call, ReentrancyGuard {
706
709
  * @param pmpInput The parameter input to validate.
707
710
  * @param pmpConfigStorage The project's configuration storage for this parameter.
708
711
  * @param projectConfigNonce The project's current configuration nonce.
712
+ * @return permissionedAddress the address used to make the update, accounting for delegation.
709
713
  */
710
714
  function _validatePMPInputAndAuth(
711
715
  uint256 tokenId,
@@ -713,7 +717,7 @@ contract PMPV0 is IPMPV0, Web3Call, ReentrancyGuard {
713
717
  PMPInput memory pmpInput,
714
718
  PMPConfigStorage storage pmpConfigStorage,
715
719
  uint8 projectConfigNonce
716
- ) internal view {
720
+ ) internal view returns (address permissionedAddress) {
717
721
  // check that the param is part of the project's most recently configured PMP params
718
722
  // @dev use config nonce to check if param is part of most recently configured PMP params
719
723
  require(
@@ -732,88 +736,79 @@ contract PMPV0 is IPMPV0, Web3Call, ReentrancyGuard {
732
736
  );
733
737
 
734
738
  // ensure caller has appropriate auth
739
+ bool isAuthenticated;
735
740
  {
736
- // @dev block scope to reduce stack depth
741
+ AuthOption authOption = pmpConfigStorage.authOption;
742
+ // if artist may configure, check and authenticate if not already authenticated
743
+ if (
744
+ authOption == AuthOption.Artist ||
745
+ authOption == AuthOption.ArtistAndAddress ||
746
+ authOption == AuthOption.ArtistAndTokenOwner ||
747
+ authOption == AuthOption.ArtistAndTokenOwnerAndAddress
748
+ ) {
749
+ bool isArtist;
750
+ (isArtist, permissionedAddress) = _isArtist({
751
+ tokenId: tokenId,
752
+ coreContract: coreContract,
753
+ sender: msg.sender
754
+ });
755
+ isAuthenticated = isArtist;
756
+ }
757
+ // if address may configure, check and authenticate if not already authenticated
758
+ if (
759
+ !isAuthenticated &&
760
+ (authOption == AuthOption.Address ||
761
+ authOption == AuthOption.TokenOwnerAndAddress ||
762
+ authOption == AuthOption.ArtistAndAddress ||
763
+ authOption == AuthOption.ArtistAndTokenOwnerAndAddress)
764
+ ) {
765
+ permissionedAddress = pmpConfigStorage.authAddress;
766
+ isAuthenticated = permissionedAddress == msg.sender;
767
+ }
768
+ // if token owner or delegate may configure, check and authenticate
769
+ // @dev check token ownerlast to enable pre-mint PMP configuration by non-token-owner
770
+ if (
771
+ !isAuthenticated &&
772
+ (authOption == AuthOption.TokenOwner ||
773
+ authOption == AuthOption.ArtistAndTokenOwner ||
774
+ authOption == AuthOption.TokenOwnerAndAddress ||
775
+ authOption == AuthOption.ArtistAndTokenOwnerAndAddress)
776
+ ) {
777
+ bool isTokenOwnerOrDelegate_;
778
+ (
779
+ isTokenOwnerOrDelegate_,
780
+ permissionedAddress
781
+ ) = _isTokenOwnerOrDelegate({
782
+ tokenId: tokenId,
783
+ coreContract: coreContract,
784
+ sender: msg.sender
785
+ });
786
+ isAuthenticated = isTokenOwnerOrDelegate_;
787
+ }
788
+ }
789
+ // if not authenticated, revert with appropriate auth error
790
+ if (!isAuthenticated) {
737
791
  AuthOption authOption = pmpConfigStorage.authOption;
738
792
  if (authOption == AuthOption.Artist) {
739
- require(
740
- _isArtist({
741
- tokenId: tokenId,
742
- coreContract: coreContract,
743
- sender: msg.sender
744
- }),
745
- "PMP: artist auth required"
746
- );
793
+ revert("PMP: artist auth required");
747
794
  } else if (authOption == AuthOption.TokenOwner) {
748
- require(
749
- _isTokenOwnerOrDelegate({
750
- tokenId: tokenId,
751
- coreContract: coreContract,
752
- sender: msg.sender
753
- }),
754
- "PMP: token owner auth required"
755
- );
795
+ revert("PMP: token owner auth required");
756
796
  } else if (authOption == AuthOption.ArtistAndTokenOwner) {
757
- // @dev check token owner or delegate last to enable pre-mint configuration by non-token-owner
758
- require(
759
- _isArtist({
760
- tokenId: tokenId,
761
- coreContract: coreContract,
762
- sender: msg.sender
763
- }) ||
764
- _isTokenOwnerOrDelegate({
765
- tokenId: tokenId,
766
- coreContract: coreContract,
767
- sender: msg.sender
768
- }),
769
- "PMP: artist and token owner auth required"
770
- );
797
+ revert("PMP: artist and token owner auth required");
771
798
  } else if (authOption == AuthOption.Address) {
772
- require(
773
- msg.sender == pmpConfigStorage.authAddress,
774
- "PMP: address auth required"
775
- );
799
+ revert("PMP: address auth required");
776
800
  } else if (authOption == AuthOption.ArtistAndTokenOwnerAndAddress) {
777
- // @dev check token owner or delegate last to enable pre-mint configuration by non-token-owner
778
- require(
779
- _isArtist({
780
- tokenId: tokenId,
781
- coreContract: coreContract,
782
- sender: msg.sender
783
- }) ||
784
- msg.sender == pmpConfigStorage.authAddress ||
785
- _isTokenOwnerOrDelegate({
786
- tokenId: tokenId,
787
- coreContract: coreContract,
788
- sender: msg.sender
789
- }),
790
- "PMP: artist and token owner and address auth required"
791
- );
801
+ revert("PMP: artist and token owner and address auth required");
792
802
  } else if (authOption == AuthOption.ArtistAndAddress) {
793
- require(
794
- _isArtist({
795
- tokenId: tokenId,
796
- coreContract: coreContract,
797
- sender: msg.sender
798
- }) || msg.sender == pmpConfigStorage.authAddress,
799
- "PMP: artist and address auth required"
800
- );
803
+ revert("PMP: artist and address auth required");
801
804
  } else if (authOption == AuthOption.TokenOwnerAndAddress) {
802
- // @dev check token owner or delegate last to enable pre-mint configuration by non-token-owner
803
- require(
804
- msg.sender == pmpConfigStorage.authAddress ||
805
- _isTokenOwnerOrDelegate({
806
- tokenId: tokenId,
807
- coreContract: coreContract,
808
- sender: msg.sender
809
- }),
810
- "PMP: token owner and address auth required"
811
- );
805
+ revert("PMP: token owner and address auth required");
812
806
  } else {
813
807
  // @dev no coverage, this should never be reached
814
808
  revert("PMP: invalid authOption");
815
809
  }
816
810
  }
811
+ // @dev auth check is complete
817
812
 
818
813
  // ensure properly configured value
819
814
  ParamType paramType = pmpConfigStorage.paramType;
@@ -874,12 +869,13 @@ contract PMPV0 is IPMPV0, Web3Call, ReentrancyGuard {
874
869
  // require artist is caller if configuring artist string
875
870
  if (pmpInput.configuringArtistString) {
876
871
  // require artist is caller
872
+ (bool isArtist, ) = _isArtist({
873
+ tokenId: tokenId,
874
+ coreContract: coreContract,
875
+ sender: msg.sender
876
+ });
877
877
  require(
878
- _isArtist({
879
- tokenId: tokenId,
880
- coreContract: coreContract,
881
- sender: msg.sender
882
- }),
878
+ isArtist,
883
879
  "PMP: artist auth required to configure artist string"
884
880
  );
885
881
  }
@@ -1019,17 +1015,18 @@ contract PMPV0 is IPMPV0, Web3Call, ReentrancyGuard {
1019
1015
  * @param tokenId The token ID to get the project ID from.
1020
1016
  * @param coreContract The address of the core contract.
1021
1017
  * @param sender The address to check if it's the artist.
1022
- * @return Returns true if the sender is the artist, false otherwise.
1018
+ * @return isArtist true if the sender is the artist, false otherwise.
1019
+ * @return artistAddress the address of the artist.
1023
1020
  */
1024
1021
  function _isArtist(
1025
1022
  uint256 tokenId,
1026
1023
  address coreContract,
1027
1024
  address sender
1028
- ) internal view returns (bool) {
1025
+ ) internal view returns (bool isArtist, address artistAddress) {
1029
1026
  uint256 projectId = ABHelpers.tokenIdToProjectId(tokenId);
1030
- return
1031
- IGenArt721CoreContractV3_Base(coreContract)
1032
- .projectIdToArtistAddress(projectId) == sender;
1027
+ artistAddress = IGenArt721CoreContractV3_Base(coreContract)
1028
+ .projectIdToArtistAddress(projectId);
1029
+ isArtist = artistAddress == sender;
1033
1030
  }
1034
1031
 
1035
1032
  /**
@@ -1040,21 +1037,19 @@ contract PMPV0 is IPMPV0, Web3Call, ReentrancyGuard {
1040
1037
  * @param tokenId The token ID to check ownership for.
1041
1038
  * @param coreContract The address of the core contract.
1042
1039
  * @param sender The address to check if it's the token owner.
1043
- * @return Returns true if the sender is the token owner, false otherwise.
1040
+ * @return isTokenOwnerOrDelegate_ true if the sender is the token owner or delegate of the token owner, false otherwise.
1041
+ * @return tokenOwner the address of the token owner.
1044
1042
  * @dev Always execute within a nonReentrant context.
1045
1043
  */
1046
1044
  function _isTokenOwnerOrDelegate(
1047
1045
  uint256 tokenId,
1048
1046
  address coreContract,
1049
1047
  address sender
1050
- ) internal view returns (bool) {
1048
+ ) internal view returns (bool isTokenOwnerOrDelegate_, address tokenOwner) {
1051
1049
  // @dev leading interaction - only execute within a nonReentrant context
1052
- address tokenOwner = IERC721(coreContract).ownerOf(tokenId);
1053
- if (tokenOwner == sender) {
1054
- return true;
1055
- }
1056
- // @dev delegate.xyz v2 support
1057
- return
1050
+ tokenOwner = IERC721(coreContract).ownerOf(tokenId);
1051
+ isTokenOwnerOrDelegate_ =
1052
+ (tokenOwner == sender) ||
1058
1053
  delegateRegistry.checkDelegateForERC721({
1059
1054
  to: sender, // hot wallet
1060
1055
  from: tokenOwner, // vault