{
  "_format": "hh-sol-artifact-1",
  "contractName": "ConcentratedLiquidityPoolManager",
  "sourceName": "contracts/pool/concentrated/ConcentratedLiquidityPoolManager.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_masterDeployer",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "pool",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "positionId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "liquidity",
          "type": "uint128"
        }
      ],
      "name": "DecreaseLiquidity",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "pool",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "positionId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "liquidity",
          "type": "uint128"
        }
      ],
      "name": "IncreaseLiquidity",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "domainSeperator",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PERMIT_ALL_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PERMIT_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "data",
          "type": "bytes[]"
        }
      ],
      "name": "batch",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "results",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "bento",
      "outputs": [
        {
          "internalType": "contract IBentoBoxMinimal",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "unwrapBento",
          "type": "bool"
        }
      ],
      "name": "collect",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "token0amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "token1amount",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint128",
          "name": "amount",
          "type": "uint128"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "unwrapBento",
          "type": "bool"
        }
      ],
      "name": "decreaseLiquidity",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "masterDeployer",
      "outputs": [
        {
          "internalType": "contract IMasterDeployer",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "noncesForAll",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "permit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "permitAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "positionFees",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "token0amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "token1amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeGrowthInside0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeGrowthInside1",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "int24",
          "name": "lower",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "upper",
          "type": "int24"
        },
        {
          "internalType": "uint128",
          "name": "amount",
          "type": "uint128"
        },
        {
          "internalType": "uint256",
          "name": "feeGrowthInside0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeGrowthInside1",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_positionId",
          "type": "uint256"
        }
      ],
      "name": "positionMintCallback",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "positionId",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "positions",
      "outputs": [
        {
          "internalType": "contract IConcentratedLiquidityPool",
          "name": "pool",
          "type": "address"
        },
        {
          "internalType": "uint128",
          "name": "liquidity",
          "type": "uint128"
        },
        {
          "internalType": "int24",
          "name": "lower",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "upper",
          "type": "int24"
        },
        {
          "internalType": "uint32",
          "name": "latestAddition",
          "type": "uint32"
        },
        {
          "internalType": "uint256",
          "name": "feeGrowthInside0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeGrowthInside1",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "supported",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x6101006040523480156200001257600080fd5b5060405162004072380380620040728339810160408190526200003591620002ef565b466080526200010e604080518082018252600a815269151c9a59195b9d13919560b21b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f790a7a9b65ea2ce0cf93ce97615ad3ceeb0a6082b5ad238c5227302f947047b0818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c0909101909252815191012090565b60a0526001600160601b0319606082901b1660e05260408051634da3182760e01b815290516000916001600160a01b03841691634da3182791600480820192602092909190829003018186803b1580156200016857600080fd5b505afa1580156200017d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a39190620002ef565b9050806001600160a01b031663aee4d1b26040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620001e157600080fd5b505af1158015620001f6573d6000803e3d6000fd5b5050506001600160601b0319606083901b1660c0525062000218600062000220565b505062000321565b6000805460018101825580825260026020526040909120546001600160a01b031615620002845760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b604482015260640160405180910390fd5b6001600160a01b038216600081815260016020818152604080842080549093019092558483526002905280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000602082840312156200030257600080fd5b81516001600160a01b03811681146200031a57600080fd5b9392505050565b60805160a05160c05160601c60e05160601c613cee62000384600039600081816107560152610e160152600081816103e8015281816119d701528181611aa201528181612e3d0152612f1b01526000610da201526000610c790152613cee6000f3fe6080604052600436106101c25760003560e01c806370a08231116100f7578063a9059cbb11610095578063cf58879a11610064578063cf58879a14610744578063e985e9c514610778578063ed7bba9a146107b3578063f745f815146107f357600080fd5b8063a9059cbb146106b0578063aba07847146106d0578063b4e13c8d146106f0578063b88d4fde1461072457600080fd5b8063904dfb8e116100d1578063904dfb8e146104ef57806395d89b411461051c57806399fbab8814610565578063a22cb4651461069057600080fd5b806370a082311461046d5780637ac2ff7b1461049a5780638c6ab013146104ba57600080fd5b806323b872dd1161016457806342842e0e1161013e57806342842e0e146103b65780634da31827146103d65780636352211e1461040a5780636d59ebe11461044d57600080fd5b806323b872dd1461034d57806330adf81f1461036d5780633644e515146103a157600080fd5b8063095ea7b3116101a0578063095ea7b3146102ba578063141a468c146102dc57806318160ddd146103175780631e897afb1461032d57600080fd5b806301ffc9a7146101c757806306fdde03146101fc578063081812fc14610252575b600080fd5b3480156101d357600080fd5b506101e76101e236600461361f565b610813565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b506102456040518060400160405280600a81526020017f54726964656e744e46540000000000000000000000000000000000000000000081525081565b6040516101f391906138f8565b34801561025e57600080fd5b5061029561026d3660046136d0565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f3565b3480156102c657600080fd5b506102da6102d5366004613413565b6108ac565b005b3480156102e857600080fd5b506103096102f73660046136d0565b60056020526000908152604090205481565b6040519081526020016101f3565b34801561032357600080fd5b5061030960005481565b61034061033b366004613520565b6109fb565b6040516101f39190613878565b34801561035957600080fd5b506102da610368366004613226565b610b6d565b34801561037957600080fd5b506103097f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad81565b3480156103ad57600080fd5b50610309610c75565b3480156103c257600080fd5b506102da6103d1366004613226565b610dc4565b3480156103e257600080fd5b506102957f000000000000000000000000000000000000000000000000000000000000000081565b34801561041657600080fd5b506102956104253660046136d0565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b34801561045957600080fd5b506103096104683660046133a2565b610de5565b34801561047957600080fd5b506103096104883660046131d0565b60016020526000908152604090205481565b3480156104a657600080fd5b506102da6104b536600461343f565b6113e2565b3480156104c657600080fd5b506104da6104d5366004613702565b6117ce565b604080519283526020830191909152016101f3565b3480156104fb57600080fd5b5061030961050a3660046131d0565b60066020526000908152604090205481565b34801561052857600080fd5b506102456040518060400160405280600481526020017f744e46540000000000000000000000000000000000000000000000000000000081525081565b34801561057157600080fd5b506106256105803660046136d0565b60076020526000908152604090208054600182015460028084015460039094015473ffffffffffffffffffffffffffffffffffffffff909316936fffffffffffffffffffffffffffffffff8316937001000000000000000000000000000000008404830b93730100000000000000000000000000000000000000810490930b92760100000000000000000000000000000000000000000000900463ffffffff16919087565b6040805173ffffffffffffffffffffffffffffffffffffffff90981688526fffffffffffffffffffffffffffffffff9096166020880152600294850b958701959095529190920b606085015263ffffffff909116608084015260a083015260c082015260e0016101f3565b34801561069c57600080fd5b506102da6106ab366004613374565b611c8a565b3480156106bc57600080fd5b506102da6106cb366004613413565b611d9e565b3480156106dc57600080fd5b506102da6106eb366004613311565b611e3a565b3480156106fc57600080fd5b506103097fdaab21af31ece73a508939fedd476a5ee5129a5ed4bb091f3236ffb45394df6281565b34801561073057600080fd5b506102da61073f366004613267565b6121be565b34801561075057600080fd5b506102957f000000000000000000000000000000000000000000000000000000000000000081565b34801561078457600080fd5b506101e76107933660046131ed565b600460209081526000928352604080842090915290825290205460ff1681565b3480156107bf57600080fd5b506107d36107ce3660046136d0565b61237a565b6040805194855260208501939093529183015260608201526080016101f3565b3480156107ff57600080fd5b506102da61080e366004613744565b61254a565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806108a657507f5b5e139f000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff163381148061090f575073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604080832033845290915290205460ff165b61097a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e4f545f415050524f564544000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60008281526003602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60608167ffffffffffffffff811115610a1657610a16613c28565b604051908082528060200260200182016040528015610a4957816020015b6060815260200190600190039081610a345790505b50905060005b82811015610b665760008030868685818110610a6d57610a6d613bf9565b9050602002810190610a7f919061390b565b604051610a8d929190613803565b600060405180830381855af49150503d8060008114610ac8576040519150601f19603f3d011682016040523d82523d6000602084013e610acd565b606091505b509150915081610b3357604481511015610ae657600080fd5b60048101905080806020019051810190610b009190613659565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097191906138f8565b80848481518110610b4657610b46613bf9565b602002602001018190525050508080610b5e90613b91565b915050610a4f565b5092915050565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1633811480610bc3575060008281526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1633145b80610bfe575073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604080832033845290915290205460ff165b610c64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e4f545f415050524f56454400000000000000000000000000000000000000006044820152606401610971565b610c6f818484612bdd565b50505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614610d9f5750604080518082018252600a81527f54726964656e744e46540000000000000000000000000000000000000000000060209182015281518083018352600181527f31000000000000000000000000000000000000000000000000000000000000009082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f790a7a9b65ea2ce0cf93ce97615ad3ceeb0a6082b5ad238c5227302f947047b0818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c0909101909252815191012090565b507f000000000000000000000000000000000000000000000000000000000000000090565b610de060008383604051806020016040528060008152506121be565b505050565b6040517fa4063dbc0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a4063dbc9060240160206040518083038186803b158015610e6d57600080fd5b505afa158015610e81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea59190613602565b610f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4e4f545f504f4f4c0000000000000000000000000000000000000000000000006044820152606401610971565b8161112157506040805160e0810182523381526fffffffffffffffffffffffffffffffff868116602080840191825260028b810b8587019081528b820b606087019081524263ffffffff9081166080890190815260a089018d815260c08a018d815260008054815260079098529a872099518a547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178a55965160018a018054955194519251919099167fffffffffffffffffffffffffff000000000000000000000000000000000000009095169490941770010000000000000000000000000000000093860b62ffffff90811694909402177fffffffffffff00000000000000ffffffffffffffffffffffffffffffffffffff1673010000000000000000000000000000000000000091860b93909316027fffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffff16919091177601000000000000000000000000000000000000000000009290911691909102179093559051918301919091559151600390910155546110bb88612caf565b6040516fffffffffffffffffffffffffffffffff86168152819073ffffffffffffffffffffffffffffffffffffffff8a169033907fc8dd8ccfbeefd448504efbf8f0f1228f3874a3556303d43aec4cc814237755f49060200160405180910390a46113d7565b6fffffffffffffffffffffffffffffffff8516156113d7576000828152600760205260408120905483106111b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f494e56414c49445f504f534954494f4e000000000000000000000000000000006044820152606401610971565b6001810154600289810b700100000000000000000000000000000000909204810b900b14801561120457506001810154600288810b730100000000000000000000000000000000000000909204810b900b145b61126a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f52414e47455f4d49535f4d4154434800000000000000000000000000000000006044820152606401610971565b8481600201541480156112805750838160030154145b6112e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e434c41494d454400000000000000000000000000000000000000000000006044820152606401610971565b60018101805487919060009061130f9084906fffffffffffffffffffffffffffffffff16613a59565b82546101009290920a6fffffffffffffffffffffffffffffffff8181021990931691831602179091556001830180547fffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffff167601000000000000000000000000000000000000000000004263ffffffff1602179055604051908816815283915073ffffffffffffffffffffffffffffffffffffffff8b169033907fc8dd8ccfbeefd448504efbf8f0f1228f3874a3556303d43aec4cc814237755f49060200160405180910390a4505b979650505050505050565b4284101561144c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f455850495245440000000000000000006044820152606401610971565b60008581526002602052604081205473ffffffffffffffffffffffffffffffffffffffff169061147a610c75565b60008881526005602090815260409182902080546001810190915582517f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad8184015273ffffffffffffffffffffffffffffffffffffffff8d1681850152606081018c9052608081019190915260a08082018b90528351808303909101815260c08201909352825192909101919091207f190100000000000000000000000000000000000000000000000000000000000060e083015260e282019290925261010281019190915261012201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156115cd573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116611675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f494e56414c49445f5045524d49545f5349474e415455524500000000000000006044820152606401610971565b8273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806116e1575073ffffffffffffffffffffffffffffffffffffffff80841660009081526004602090815260408083209385168352929052205460ff165b611747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e45520000000000000000000000000000000000006044820152606401610971565b505060008681526003602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8b811691821790925591518993918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a450505050505050565b600083815260026020526040812054819073ffffffffffffffffffffffffffffffffffffffff16331461185d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e4f545f49445f4f574e455200000000000000000000000000000000000000006044820152606401610971565b600085815260076020526040808220805482517f67e4ac2c000000000000000000000000000000000000000000000000000000008152925191939273ffffffffffffffffffffffffffffffffffffffff909116916367e4ac2c916004808201928692909190829003018186803b1580156118d657600080fd5b505afa1580156118ea573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611930919081019061347f565b905060008160008151811061194757611947613bf9565b6020026020010151905060008260018151811061196657611966613bf9565b602002602001015190506119798961237a565b600388015560028701556040517ff7888aec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301529298509096506000917f0000000000000000000000000000000000000000000000000000000000000000169063f7888aec9060440160206040518083038186803b158015611a1957600080fd5b505afa158015611a2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5191906136e9565b6040517ff7888aec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301523060248301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063f7888aec9060440160206040518083038186803b158015611ae457600080fd5b505afa158015611af8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1c91906136e9565b905087821080611b2b57508681105b15611c6257855460018701546040517ffb39d6280000000000000000000000000000000000000000000000000000000081527001000000000000000000000000000000008204600290810b810b6004830152730100000000000000000000000000000000000000909204820b90910b602482015230604482015260006064820181905291829173ffffffffffffffffffffffffffffffffffffffff9091169063fb39d628906084016040805180830381600087803b158015611bec57600080fd5b505af1158015611c00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c249190613795565b90925090506000611c358584613a8d565b90506000611c438584613a8d565b9050818c1115611c5157819b505b808b1115611c5d57809a505b505050505b611c6f84308c8b8d612dd4565b611c7c83308c8a8d612dd4565b505050505050935093915050565b73ffffffffffffffffffffffffffffffffffffffff8216611d07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f494e56414c49445f4f50455241544f52000000000000000000000000000000006044820152606401610971565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff163314611e2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e4f545f4f574e455200000000000000000000000000000000000000000000006044820152606401610971565b611e36338383612bdd565b5050565b42841015611ea4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f455850495245440000000000000000006044820152606401610971565b6000611eae610c75565b73ffffffffffffffffffffffffffffffffffffffff88811660008181526006602090815260409182902080546001810190915582517fdaab21af31ece73a508939fedd476a5ee5129a5ed4bb091f3236ffb45394df628184015280840194909452938b166060840152608083019390935260a08083018a90528151808403909101815260c0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000060e083015260e282019290925261010281019190915261012201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015612004573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061207f57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b806120bc575073ffffffffffffffffffffffffffffffffffffffff80891660009081526004602090815260408083209385168352929052205460ff165b612122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f494e56414c49445f5045524d49545f5349474e415455524500000000000000006044820152606401610971565b505073ffffffffffffffffffffffffffffffffffffffff8681166000818152600460209081526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050505050565b6121ca60008484610b6d565b73ffffffffffffffffffffffffffffffffffffffff83163b15610c6f5760008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02336000868660405160240161221d949392919061382f565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161226b9190613813565b600060405180830381855afa9150503d80600081146122a6576040519150601f19603f3d011682016040523d82523d6000602084013e6122ab565b606091505b509150506000818060200190518101906122c5919061363c565b90507f150b7a02000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821614612372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e4f545f4552433732315f5245434549564552000000000000000000000000006044820152606401610971565b505050505050565b6000818152600760209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff1680825260018301546fffffffffffffffffffffffffffffffff8116958301959095527001000000000000000000000000000000008504600290810b810b810b8386018190527301000000000000000000000000000000000000008704820b820b820b6060850181905276010000000000000000000000000000000000000000000090970463ffffffff1660808501528185015460a085015260039094015460c084015293517facfe88f800000000000000000000000000000000000000000000000000000000815292840b60048401529390920b602482015283928392839290919063acfe88f890604401604080518083038186803b1580156124ad57600080fd5b505afa1580156124c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e59190613795565b60a0830151919450925061252b906124fd9085613b4e565b82602001516fffffffffffffffffffffffffffffffff16700100000000000000000000000000000000612f7f565b94506125408160c00151836124fd9190613b4e565b9350509193509193565b60008481526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1633146125d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e4f545f49445f4f574e455200000000000000000000000000000000000000006044820152606401610971565b6000848152600760205260408120600181015490916060918291906fffffffffffffffffffffffffffffffff908116908816101561288d57835460018501546040517f6289db820000000000000000000000000000000000000000000000000000000081527001000000000000000000000000000000008204600290810b810b6004830152730100000000000000000000000000000000000000909204820b90910b60248201526fffffffffffffffffffffffffffffffff891660448201523060648201526000608482015273ffffffffffffffffffffffffffffffffffffffff90911690636289db829060a401600060405180830381600087803b1580156126df57600080fd5b505af11580156126f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526127399190810190613595565b865460018801546040517facfe88f80000000000000000000000000000000000000000000000000000000081527001000000000000000000000000000000008204600290810b810b6004830152730100000000000000000000000000000000000000909204820b90910b6024820152939650919450925073ffffffffffffffffffffffffffffffffffffffff169063acfe88f890604401604080518083038186803b1580156127e757600080fd5b505afa1580156127fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281f9190613795565b600386015560028501556001840180548891906000906128529084906fffffffffffffffffffffffffffffffff16613b1d565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550612a2f565b835460018501546040517f6289db820000000000000000000000000000000000000000000000000000000081527001000000000000000000000000000000008204600290810b810b60048301527301000000000000000000000000000000000000008304810b900b60248201526fffffffffffffffffffffffffffffffff90911660448201523060648201526000608482015273ffffffffffffffffffffffffffffffffffffffff90911690636289db829060a401600060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526129b69190810190613595565b60008b815260076020526040812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001810180547fffffffffffff0000000000000000000000000000000000000000000000000000169055600281018290556003015591945092509050612a2f88613051565b600081886fffffffffffffffffffffffffffffffff1684600081518110612a5857612a58613bf9565b602002602001015160200151612a6e9190613ae0565b612a789190613aa5565b84600081518110612a8b57612a8b613bf9565b602002602001015160200151612aa19190613a8d565b9050600082896fffffffffffffffffffffffffffffffff1685600181518110612acc57612acc613bf9565b602002602001015160200151612ae29190613ae0565b612aec9190613aa5565b85600181518110612aff57612aff613bf9565b602002602001015160200151612b159190613a8d565b9050612b4285600081518110612b2d57612b2d613bf9565b602002602001015160000151308a858b612dd4565b612b6d85600181518110612b5857612b58613bf9565b602002602001015160000151308a848b612dd4565b85546040516fffffffffffffffffffffffffffffffff8b1681528b91339173ffffffffffffffffffffffffffffffffffffffff909116907fa246c3c6c374294b514c67820df22c91e7d4946b79d7e9fbcdc2a9ea99036ce09060200160405180910390a450505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020818152604080842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01905594871680845285842080549093019092558583526003815284832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915560029091528483208054909116821790559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60008054600181018255808252600260205260409091205473ffffffffffffffffffffffffffffffffffffffff1615612d44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f414c52454144595f4d494e5445440000000000000000000000000000000000006044820152606401610971565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260016020818152604080842080549093019092558483526002905280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8015612ebf576040517f97da6d3000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301528581166024830152848116604483015260006064830152608482018490527f000000000000000000000000000000000000000000000000000000000000000016906397da6d309060a4016040805180830381600087803b158015612e8057600080fd5b505af1158015612e94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb89190613795565b5050612f78565b6040517ff18d03cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015285811660248301528481166044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063f18d03cc90608401600060405180830381600087803b158015612f5f57600080fd5b505af1158015612f73573d6000803e3d6000fd5b505050505b5050505050565b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8587098587029250828110838203039150508060001415612fd75760008411612fcc57600080fd5b50829004905061304a565b808411612fe357600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16806130dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4e4f545f4d494e544544000000000000000000000000000000000000000000006044820152606401610971565b611e3681600084612bdd565b600082601f8301126130fa57600080fd5b8151602061310f61310a836139ef565b6139a0565b80838252828201915082860187848660061b890101111561312f57600080fd5b6000805b8681101561317a57604080848c03121561314b578283fd5b613153613977565b845161315e81613c57565b8152848801518882015286529486019490920191600101613133565b509198975050505050505050565b8035600281900b811461319a57600080fd5b919050565b80356fffffffffffffffffffffffffffffffff8116811461319a57600080fd5b803560ff8116811461319a57600080fd5b6000602082840312156131e257600080fd5b813561304a81613c57565b6000806040838503121561320057600080fd5b823561320b81613c57565b9150602083013561321b81613c57565b809150509250929050565b60008060006060848603121561323b57600080fd5b833561324681613c57565b9250602084013561325681613c57565b929592945050506040919091013590565b6000806000806080858703121561327d57600080fd5b843561328881613c57565b9350602085013561329881613c57565b925060408501359150606085013567ffffffffffffffff8111156132bb57600080fd5b8501601f810187136132cc57600080fd5b80356132da61310a82613a13565b8181528860208385010111156132ef57600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060008060008060c0878903121561332a57600080fd5b863561333581613c57565b9550602087013561334581613c57565b94506040870135935061335a606088016131bf565b92506080870135915060a087013590509295509295509295565b6000806040838503121561338757600080fd5b823561339281613c57565b9150602083013561321b81613c7c565b600080600080600080600060e0888a0312156133bd57600080fd5b87356133c881613c57565b96506133d660208901613188565b95506133e460408901613188565b94506133f26060890161319f565b9699959850939660808101359560a0820135955060c0909101359350915050565b6000806040838503121561342657600080fd5b823561343181613c57565b946020939093013593505050565b60008060008060008060c0878903121561345857600080fd5b863561346381613c57565b9550602087013594506040870135935061335a606088016131bf565b6000602080838503121561349257600080fd5b825167ffffffffffffffff8111156134a957600080fd5b8301601f810185136134ba57600080fd5b80516134c861310a826139ef565b80828252848201915084840188868560051b87010111156134e857600080fd5b600094505b8385101561351457805161350081613c57565b8352600194909401939185019185016134ed565b50979650505050505050565b6000806020838503121561353357600080fd5b823567ffffffffffffffff8082111561354b57600080fd5b818501915085601f83011261355f57600080fd5b81358181111561356e57600080fd5b8660208260051b850101111561358357600080fd5b60209290920196919550909350505050565b6000806000606084860312156135aa57600080fd5b835167ffffffffffffffff808211156135c257600080fd5b6135ce878388016130e9565b945060208601519150808211156135e457600080fd5b506135f1868287016130e9565b925050604084015190509250925092565b60006020828403121561361457600080fd5b815161304a81613c7c565b60006020828403121561363157600080fd5b813561304a81613c8a565b60006020828403121561364e57600080fd5b815161304a81613c8a565b60006020828403121561366b57600080fd5b815167ffffffffffffffff81111561368257600080fd5b8201601f8101841361369357600080fd5b80516136a161310a82613a13565b8181528560208385010111156136b657600080fd5b6136c7826020830160208601613b65565b95945050505050565b6000602082840312156136e257600080fd5b5035919050565b6000602082840312156136fb57600080fd5b5051919050565b60008060006060848603121561371757600080fd5b83359250602084013561372981613c57565b9150604084013561373981613c7c565b809150509250925092565b6000806000806080858703121561375a57600080fd5b8435935061376a6020860161319f565b9250604085013561377a81613c57565b9150606085013561378a81613c7c565b939692955090935050565b600080604083850312156137a857600080fd5b505080516020909101519092909150565b600081518084526137d1816020860160208601613b65565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8183823760009101908152919050565b60008251613825818460208701613b65565b9190910192915050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152508360408301526080606083015261386e60808301846137b9565b9695505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156138eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526138d98583516137b9565b9450928501929085019060010161389f565b5092979650505050505050565b60208152600061304a60208301846137b9565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261394057600080fd5b83018035915067ffffffffffffffff82111561395b57600080fd5b60200191503681900382131561397057600080fd5b9250929050565b6040805190810167ffffffffffffffff8111828210171561399a5761399a613c28565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156139e7576139e7613c28565b604052919050565b600067ffffffffffffffff821115613a0957613a09613c28565b5060051b60200190565b600067ffffffffffffffff821115613a2d57613a2d613c28565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60006fffffffffffffffffffffffffffffffff808316818516808303821115613a8457613a84613bca565b01949350505050565b60008219821115613aa057613aa0613bca565b500190565b600082613adb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b1857613b18613bca565b500290565b60006fffffffffffffffffffffffffffffffff83811690831681811015613b4657613b46613bca565b039392505050565b600082821015613b6057613b60613bca565b500390565b60005b83811015613b80578181015183820152602001613b68565b83811115610c6f5750506000910152565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613bc357613bc3613bca565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81168114613c7957600080fd5b50565b8015158114613c7957600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081168114613c7957600080fdfea26469706673582212200286348d96fdf39162628e3fb3070007216cd69a53a416862c0e3003a4ba83a764736f6c63430008070033",
  "deployedBytecode": "0x6080604052600436106101c25760003560e01c806370a08231116100f7578063a9059cbb11610095578063cf58879a11610064578063cf58879a14610744578063e985e9c514610778578063ed7bba9a146107b3578063f745f815146107f357600080fd5b8063a9059cbb146106b0578063aba07847146106d0578063b4e13c8d146106f0578063b88d4fde1461072457600080fd5b8063904dfb8e116100d1578063904dfb8e146104ef57806395d89b411461051c57806399fbab8814610565578063a22cb4651461069057600080fd5b806370a082311461046d5780637ac2ff7b1461049a5780638c6ab013146104ba57600080fd5b806323b872dd1161016457806342842e0e1161013e57806342842e0e146103b65780634da31827146103d65780636352211e1461040a5780636d59ebe11461044d57600080fd5b806323b872dd1461034d57806330adf81f1461036d5780633644e515146103a157600080fd5b8063095ea7b3116101a0578063095ea7b3146102ba578063141a468c146102dc57806318160ddd146103175780631e897afb1461032d57600080fd5b806301ffc9a7146101c757806306fdde03146101fc578063081812fc14610252575b600080fd5b3480156101d357600080fd5b506101e76101e236600461361f565b610813565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b506102456040518060400160405280600a81526020017f54726964656e744e46540000000000000000000000000000000000000000000081525081565b6040516101f391906138f8565b34801561025e57600080fd5b5061029561026d3660046136d0565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f3565b3480156102c657600080fd5b506102da6102d5366004613413565b6108ac565b005b3480156102e857600080fd5b506103096102f73660046136d0565b60056020526000908152604090205481565b6040519081526020016101f3565b34801561032357600080fd5b5061030960005481565b61034061033b366004613520565b6109fb565b6040516101f39190613878565b34801561035957600080fd5b506102da610368366004613226565b610b6d565b34801561037957600080fd5b506103097f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad81565b3480156103ad57600080fd5b50610309610c75565b3480156103c257600080fd5b506102da6103d1366004613226565b610dc4565b3480156103e257600080fd5b506102957f000000000000000000000000000000000000000000000000000000000000000081565b34801561041657600080fd5b506102956104253660046136d0565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b34801561045957600080fd5b506103096104683660046133a2565b610de5565b34801561047957600080fd5b506103096104883660046131d0565b60016020526000908152604090205481565b3480156104a657600080fd5b506102da6104b536600461343f565b6113e2565b3480156104c657600080fd5b506104da6104d5366004613702565b6117ce565b604080519283526020830191909152016101f3565b3480156104fb57600080fd5b5061030961050a3660046131d0565b60066020526000908152604090205481565b34801561052857600080fd5b506102456040518060400160405280600481526020017f744e46540000000000000000000000000000000000000000000000000000000081525081565b34801561057157600080fd5b506106256105803660046136d0565b60076020526000908152604090208054600182015460028084015460039094015473ffffffffffffffffffffffffffffffffffffffff909316936fffffffffffffffffffffffffffffffff8316937001000000000000000000000000000000008404830b93730100000000000000000000000000000000000000810490930b92760100000000000000000000000000000000000000000000900463ffffffff16919087565b6040805173ffffffffffffffffffffffffffffffffffffffff90981688526fffffffffffffffffffffffffffffffff9096166020880152600294850b958701959095529190920b606085015263ffffffff909116608084015260a083015260c082015260e0016101f3565b34801561069c57600080fd5b506102da6106ab366004613374565b611c8a565b3480156106bc57600080fd5b506102da6106cb366004613413565b611d9e565b3480156106dc57600080fd5b506102da6106eb366004613311565b611e3a565b3480156106fc57600080fd5b506103097fdaab21af31ece73a508939fedd476a5ee5129a5ed4bb091f3236ffb45394df6281565b34801561073057600080fd5b506102da61073f366004613267565b6121be565b34801561075057600080fd5b506102957f000000000000000000000000000000000000000000000000000000000000000081565b34801561078457600080fd5b506101e76107933660046131ed565b600460209081526000928352604080842090915290825290205460ff1681565b3480156107bf57600080fd5b506107d36107ce3660046136d0565b61237a565b6040805194855260208501939093529183015260608201526080016101f3565b3480156107ff57600080fd5b506102da61080e366004613744565b61254a565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806108a657507f5b5e139f000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff163381148061090f575073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604080832033845290915290205460ff165b61097a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e4f545f415050524f564544000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60008281526003602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60608167ffffffffffffffff811115610a1657610a16613c28565b604051908082528060200260200182016040528015610a4957816020015b6060815260200190600190039081610a345790505b50905060005b82811015610b665760008030868685818110610a6d57610a6d613bf9565b9050602002810190610a7f919061390b565b604051610a8d929190613803565b600060405180830381855af49150503d8060008114610ac8576040519150601f19603f3d011682016040523d82523d6000602084013e610acd565b606091505b509150915081610b3357604481511015610ae657600080fd5b60048101905080806020019051810190610b009190613659565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097191906138f8565b80848481518110610b4657610b46613bf9565b602002602001018190525050508080610b5e90613b91565b915050610a4f565b5092915050565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1633811480610bc3575060008281526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1633145b80610bfe575073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604080832033845290915290205460ff165b610c64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e4f545f415050524f56454400000000000000000000000000000000000000006044820152606401610971565b610c6f818484612bdd565b50505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614610d9f5750604080518082018252600a81527f54726964656e744e46540000000000000000000000000000000000000000000060209182015281518083018352600181527f31000000000000000000000000000000000000000000000000000000000000009082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f790a7a9b65ea2ce0cf93ce97615ad3ceeb0a6082b5ad238c5227302f947047b0818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c0909101909252815191012090565b507f000000000000000000000000000000000000000000000000000000000000000090565b610de060008383604051806020016040528060008152506121be565b505050565b6040517fa4063dbc0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a4063dbc9060240160206040518083038186803b158015610e6d57600080fd5b505afa158015610e81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea59190613602565b610f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4e4f545f504f4f4c0000000000000000000000000000000000000000000000006044820152606401610971565b8161112157506040805160e0810182523381526fffffffffffffffffffffffffffffffff868116602080840191825260028b810b8587019081528b820b606087019081524263ffffffff9081166080890190815260a089018d815260c08a018d815260008054815260079098529a872099518a547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178a55965160018a018054955194519251919099167fffffffffffffffffffffffffff000000000000000000000000000000000000009095169490941770010000000000000000000000000000000093860b62ffffff90811694909402177fffffffffffff00000000000000ffffffffffffffffffffffffffffffffffffff1673010000000000000000000000000000000000000091860b93909316027fffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffff16919091177601000000000000000000000000000000000000000000009290911691909102179093559051918301919091559151600390910155546110bb88612caf565b6040516fffffffffffffffffffffffffffffffff86168152819073ffffffffffffffffffffffffffffffffffffffff8a169033907fc8dd8ccfbeefd448504efbf8f0f1228f3874a3556303d43aec4cc814237755f49060200160405180910390a46113d7565b6fffffffffffffffffffffffffffffffff8516156113d7576000828152600760205260408120905483106111b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f494e56414c49445f504f534954494f4e000000000000000000000000000000006044820152606401610971565b6001810154600289810b700100000000000000000000000000000000909204810b900b14801561120457506001810154600288810b730100000000000000000000000000000000000000909204810b900b145b61126a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f52414e47455f4d49535f4d4154434800000000000000000000000000000000006044820152606401610971565b8481600201541480156112805750838160030154145b6112e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e434c41494d454400000000000000000000000000000000000000000000006044820152606401610971565b60018101805487919060009061130f9084906fffffffffffffffffffffffffffffffff16613a59565b82546101009290920a6fffffffffffffffffffffffffffffffff8181021990931691831602179091556001830180547fffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffff167601000000000000000000000000000000000000000000004263ffffffff1602179055604051908816815283915073ffffffffffffffffffffffffffffffffffffffff8b169033907fc8dd8ccfbeefd448504efbf8f0f1228f3874a3556303d43aec4cc814237755f49060200160405180910390a4505b979650505050505050565b4284101561144c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f455850495245440000000000000000006044820152606401610971565b60008581526002602052604081205473ffffffffffffffffffffffffffffffffffffffff169061147a610c75565b60008881526005602090815260409182902080546001810190915582517f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad8184015273ffffffffffffffffffffffffffffffffffffffff8d1681850152606081018c9052608081019190915260a08082018b90528351808303909101815260c08201909352825192909101919091207f190100000000000000000000000000000000000000000000000000000000000060e083015260e282019290925261010281019190915261012201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156115cd573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116611675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f494e56414c49445f5045524d49545f5349474e415455524500000000000000006044820152606401610971565b8273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806116e1575073ffffffffffffffffffffffffffffffffffffffff80841660009081526004602090815260408083209385168352929052205460ff165b611747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e45520000000000000000000000000000000000006044820152606401610971565b505060008681526003602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8b811691821790925591518993918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a450505050505050565b600083815260026020526040812054819073ffffffffffffffffffffffffffffffffffffffff16331461185d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e4f545f49445f4f574e455200000000000000000000000000000000000000006044820152606401610971565b600085815260076020526040808220805482517f67e4ac2c000000000000000000000000000000000000000000000000000000008152925191939273ffffffffffffffffffffffffffffffffffffffff909116916367e4ac2c916004808201928692909190829003018186803b1580156118d657600080fd5b505afa1580156118ea573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611930919081019061347f565b905060008160008151811061194757611947613bf9565b6020026020010151905060008260018151811061196657611966613bf9565b602002602001015190506119798961237a565b600388015560028701556040517ff7888aec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301529298509096506000917f0000000000000000000000000000000000000000000000000000000000000000169063f7888aec9060440160206040518083038186803b158015611a1957600080fd5b505afa158015611a2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5191906136e9565b6040517ff7888aec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301523060248301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063f7888aec9060440160206040518083038186803b158015611ae457600080fd5b505afa158015611af8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1c91906136e9565b905087821080611b2b57508681105b15611c6257855460018701546040517ffb39d6280000000000000000000000000000000000000000000000000000000081527001000000000000000000000000000000008204600290810b810b6004830152730100000000000000000000000000000000000000909204820b90910b602482015230604482015260006064820181905291829173ffffffffffffffffffffffffffffffffffffffff9091169063fb39d628906084016040805180830381600087803b158015611bec57600080fd5b505af1158015611c00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c249190613795565b90925090506000611c358584613a8d565b90506000611c438584613a8d565b9050818c1115611c5157819b505b808b1115611c5d57809a505b505050505b611c6f84308c8b8d612dd4565b611c7c83308c8a8d612dd4565b505050505050935093915050565b73ffffffffffffffffffffffffffffffffffffffff8216611d07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f494e56414c49445f4f50455241544f52000000000000000000000000000000006044820152606401610971565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff163314611e2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e4f545f4f574e455200000000000000000000000000000000000000000000006044820152606401610971565b611e36338383612bdd565b5050565b42841015611ea4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f455850495245440000000000000000006044820152606401610971565b6000611eae610c75565b73ffffffffffffffffffffffffffffffffffffffff88811660008181526006602090815260409182902080546001810190915582517fdaab21af31ece73a508939fedd476a5ee5129a5ed4bb091f3236ffb45394df628184015280840194909452938b166060840152608083019390935260a08083018a90528151808403909101815260c0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000060e083015260e282019290925261010281019190915261012201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015612004573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061207f57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b806120bc575073ffffffffffffffffffffffffffffffffffffffff80891660009081526004602090815260408083209385168352929052205460ff165b612122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f494e56414c49445f5045524d49545f5349474e415455524500000000000000006044820152606401610971565b505073ffffffffffffffffffffffffffffffffffffffff8681166000818152600460209081526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050505050565b6121ca60008484610b6d565b73ffffffffffffffffffffffffffffffffffffffff83163b15610c6f5760008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02336000868660405160240161221d949392919061382f565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161226b9190613813565b600060405180830381855afa9150503d80600081146122a6576040519150601f19603f3d011682016040523d82523d6000602084013e6122ab565b606091505b509150506000818060200190518101906122c5919061363c565b90507f150b7a02000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821614612372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e4f545f4552433732315f5245434549564552000000000000000000000000006044820152606401610971565b505050505050565b6000818152600760209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff1680825260018301546fffffffffffffffffffffffffffffffff8116958301959095527001000000000000000000000000000000008504600290810b810b810b8386018190527301000000000000000000000000000000000000008704820b820b820b6060850181905276010000000000000000000000000000000000000000000090970463ffffffff1660808501528185015460a085015260039094015460c084015293517facfe88f800000000000000000000000000000000000000000000000000000000815292840b60048401529390920b602482015283928392839290919063acfe88f890604401604080518083038186803b1580156124ad57600080fd5b505afa1580156124c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e59190613795565b60a0830151919450925061252b906124fd9085613b4e565b82602001516fffffffffffffffffffffffffffffffff16700100000000000000000000000000000000612f7f565b94506125408160c00151836124fd9190613b4e565b9350509193509193565b60008481526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1633146125d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e4f545f49445f4f574e455200000000000000000000000000000000000000006044820152606401610971565b6000848152600760205260408120600181015490916060918291906fffffffffffffffffffffffffffffffff908116908816101561288d57835460018501546040517f6289db820000000000000000000000000000000000000000000000000000000081527001000000000000000000000000000000008204600290810b810b6004830152730100000000000000000000000000000000000000909204820b90910b60248201526fffffffffffffffffffffffffffffffff891660448201523060648201526000608482015273ffffffffffffffffffffffffffffffffffffffff90911690636289db829060a401600060405180830381600087803b1580156126df57600080fd5b505af11580156126f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526127399190810190613595565b865460018801546040517facfe88f80000000000000000000000000000000000000000000000000000000081527001000000000000000000000000000000008204600290810b810b6004830152730100000000000000000000000000000000000000909204820b90910b6024820152939650919450925073ffffffffffffffffffffffffffffffffffffffff169063acfe88f890604401604080518083038186803b1580156127e757600080fd5b505afa1580156127fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281f9190613795565b600386015560028501556001840180548891906000906128529084906fffffffffffffffffffffffffffffffff16613b1d565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550612a2f565b835460018501546040517f6289db820000000000000000000000000000000000000000000000000000000081527001000000000000000000000000000000008204600290810b810b60048301527301000000000000000000000000000000000000008304810b900b60248201526fffffffffffffffffffffffffffffffff90911660448201523060648201526000608482015273ffffffffffffffffffffffffffffffffffffffff90911690636289db829060a401600060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526129b69190810190613595565b60008b815260076020526040812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001810180547fffffffffffff0000000000000000000000000000000000000000000000000000169055600281018290556003015591945092509050612a2f88613051565b600081886fffffffffffffffffffffffffffffffff1684600081518110612a5857612a58613bf9565b602002602001015160200151612a6e9190613ae0565b612a789190613aa5565b84600081518110612a8b57612a8b613bf9565b602002602001015160200151612aa19190613a8d565b9050600082896fffffffffffffffffffffffffffffffff1685600181518110612acc57612acc613bf9565b602002602001015160200151612ae29190613ae0565b612aec9190613aa5565b85600181518110612aff57612aff613bf9565b602002602001015160200151612b159190613a8d565b9050612b4285600081518110612b2d57612b2d613bf9565b602002602001015160000151308a858b612dd4565b612b6d85600181518110612b5857612b58613bf9565b602002602001015160000151308a848b612dd4565b85546040516fffffffffffffffffffffffffffffffff8b1681528b91339173ffffffffffffffffffffffffffffffffffffffff909116907fa246c3c6c374294b514c67820df22c91e7d4946b79d7e9fbcdc2a9ea99036ce09060200160405180910390a450505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020818152604080842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01905594871680845285842080549093019092558583526003815284832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915560029091528483208054909116821790559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60008054600181018255808252600260205260409091205473ffffffffffffffffffffffffffffffffffffffff1615612d44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f414c52454144595f4d494e5445440000000000000000000000000000000000006044820152606401610971565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260016020818152604080842080549093019092558483526002905280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8015612ebf576040517f97da6d3000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301528581166024830152848116604483015260006064830152608482018490527f000000000000000000000000000000000000000000000000000000000000000016906397da6d309060a4016040805180830381600087803b158015612e8057600080fd5b505af1158015612e94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb89190613795565b5050612f78565b6040517ff18d03cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015285811660248301528481166044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063f18d03cc90608401600060405180830381600087803b158015612f5f57600080fd5b505af1158015612f73573d6000803e3d6000fd5b505050505b5050505050565b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8587098587029250828110838203039150508060001415612fd75760008411612fcc57600080fd5b50829004905061304a565b808411612fe357600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16806130dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4e4f545f4d494e544544000000000000000000000000000000000000000000006044820152606401610971565b611e3681600084612bdd565b600082601f8301126130fa57600080fd5b8151602061310f61310a836139ef565b6139a0565b80838252828201915082860187848660061b890101111561312f57600080fd5b6000805b8681101561317a57604080848c03121561314b578283fd5b613153613977565b845161315e81613c57565b8152848801518882015286529486019490920191600101613133565b509198975050505050505050565b8035600281900b811461319a57600080fd5b919050565b80356fffffffffffffffffffffffffffffffff8116811461319a57600080fd5b803560ff8116811461319a57600080fd5b6000602082840312156131e257600080fd5b813561304a81613c57565b6000806040838503121561320057600080fd5b823561320b81613c57565b9150602083013561321b81613c57565b809150509250929050565b60008060006060848603121561323b57600080fd5b833561324681613c57565b9250602084013561325681613c57565b929592945050506040919091013590565b6000806000806080858703121561327d57600080fd5b843561328881613c57565b9350602085013561329881613c57565b925060408501359150606085013567ffffffffffffffff8111156132bb57600080fd5b8501601f810187136132cc57600080fd5b80356132da61310a82613a13565b8181528860208385010111156132ef57600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060008060008060c0878903121561332a57600080fd5b863561333581613c57565b9550602087013561334581613c57565b94506040870135935061335a606088016131bf565b92506080870135915060a087013590509295509295509295565b6000806040838503121561338757600080fd5b823561339281613c57565b9150602083013561321b81613c7c565b600080600080600080600060e0888a0312156133bd57600080fd5b87356133c881613c57565b96506133d660208901613188565b95506133e460408901613188565b94506133f26060890161319f565b9699959850939660808101359560a0820135955060c0909101359350915050565b6000806040838503121561342657600080fd5b823561343181613c57565b946020939093013593505050565b60008060008060008060c0878903121561345857600080fd5b863561346381613c57565b9550602087013594506040870135935061335a606088016131bf565b6000602080838503121561349257600080fd5b825167ffffffffffffffff8111156134a957600080fd5b8301601f810185136134ba57600080fd5b80516134c861310a826139ef565b80828252848201915084840188868560051b87010111156134e857600080fd5b600094505b8385101561351457805161350081613c57565b8352600194909401939185019185016134ed565b50979650505050505050565b6000806020838503121561353357600080fd5b823567ffffffffffffffff8082111561354b57600080fd5b818501915085601f83011261355f57600080fd5b81358181111561356e57600080fd5b8660208260051b850101111561358357600080fd5b60209290920196919550909350505050565b6000806000606084860312156135aa57600080fd5b835167ffffffffffffffff808211156135c257600080fd5b6135ce878388016130e9565b945060208601519150808211156135e457600080fd5b506135f1868287016130e9565b925050604084015190509250925092565b60006020828403121561361457600080fd5b815161304a81613c7c565b60006020828403121561363157600080fd5b813561304a81613c8a565b60006020828403121561364e57600080fd5b815161304a81613c8a565b60006020828403121561366b57600080fd5b815167ffffffffffffffff81111561368257600080fd5b8201601f8101841361369357600080fd5b80516136a161310a82613a13565b8181528560208385010111156136b657600080fd5b6136c7826020830160208601613b65565b95945050505050565b6000602082840312156136e257600080fd5b5035919050565b6000602082840312156136fb57600080fd5b5051919050565b60008060006060848603121561371757600080fd5b83359250602084013561372981613c57565b9150604084013561373981613c7c565b809150509250925092565b6000806000806080858703121561375a57600080fd5b8435935061376a6020860161319f565b9250604085013561377a81613c57565b9150606085013561378a81613c7c565b939692955090935050565b600080604083850312156137a857600080fd5b505080516020909101519092909150565b600081518084526137d1816020860160208601613b65565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8183823760009101908152919050565b60008251613825818460208701613b65565b9190910192915050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152508360408301526080606083015261386e60808301846137b9565b9695505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156138eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526138d98583516137b9565b9450928501929085019060010161389f565b5092979650505050505050565b60208152600061304a60208301846137b9565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261394057600080fd5b83018035915067ffffffffffffffff82111561395b57600080fd5b60200191503681900382131561397057600080fd5b9250929050565b6040805190810167ffffffffffffffff8111828210171561399a5761399a613c28565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156139e7576139e7613c28565b604052919050565b600067ffffffffffffffff821115613a0957613a09613c28565b5060051b60200190565b600067ffffffffffffffff821115613a2d57613a2d613c28565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60006fffffffffffffffffffffffffffffffff808316818516808303821115613a8457613a84613bca565b01949350505050565b60008219821115613aa057613aa0613bca565b500190565b600082613adb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b1857613b18613bca565b500290565b60006fffffffffffffffffffffffffffffffff83811690831681811015613b4657613b46613bca565b039392505050565b600082821015613b6057613b60613bca565b500390565b60005b83811015613b80578181015183820152602001613b68565b83811115610c6f5750506000910152565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613bc357613bc3613bca565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81168114613c7957600080fd5b50565b8015158114613c7957600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081168114613c7957600080fdfea26469706673582212200286348d96fdf39162628e3fb3070007216cd69a53a416862c0e3003a4ba83a764736f6c63430008070033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
