{
  "_format": "hh-sol-artifact-1",
  "contractName": "ConstantProductPool",
  "sourceName": "contracts/pool/ConstantProductPool.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_deployData",
          "type": "bytes"
        },
        {
          "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": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "liquidity",
          "type": "uint256"
        }
      ],
      "name": "Burn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "liquidity",
          "type": "uint256"
        }
      ],
      "name": "Mint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenIn",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        }
      ],
      "name": "Swap",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "reserve0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "reserve1",
          "type": "uint256"
        }
      ],
      "name": "Sync",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "domainSeperator",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PERMIT_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "barFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "barFeeTo",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "bento",
      "outputs": [
        {
          "internalType": "contract IBentoBoxMinimal",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "burn",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "internalType": "struct IPool.TokenAmount[]",
          "name": "withdrawnAmounts",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "burnSingle",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "flashSwap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "getAmountIn",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "finalAmountIn",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "getAmountOut",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "finalAmountOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getAssets",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "assets",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getNativeReserves",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_nativeReserve0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_nativeReserve1",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_blockTimestampLast",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getReserves",
      "outputs": [
        {
          "internalType": "uint112",
          "name": "_reserve0",
          "type": "uint112"
        },
        {
          "internalType": "uint112",
          "name": "_reserve1",
          "type": "uint112"
        },
        {
          "internalType": "uint32",
          "name": "_blockTimestampLast",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "kLast",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "masterDeployer",
      "outputs": [
        {
          "internalType": "contract IMasterDeployer",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "liquidity",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "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": [],
      "name": "poolIdentifier",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "price0CumulativeLast",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "price1CumulativeLast",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "swap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "swapFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "token0",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "token1",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "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": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "updateBarFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x6101a06040523480156200001257600080fd5b50604051620045ab380380620045ab83398101604081905262000035916200056a565b4660805262000112604080518082018252600e81526d29bab9b434902628102a37b5b2b760911b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fc2bf45081e840722410522aa366600d7fe4da5bfb5a5b417f4d5125b4ed180a4818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c0909101909252815191012090565b60a08181525050600080600080858060200190518101906200013591906200050a565b929650909450925090506001600160a01b0384166200018a5760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b60448201526064015b60405180910390fd5b826001600160a01b0316846001600160a01b03161415620001ee5760405162461bcd60e51b815260206004820152601360248201527f4944454e544943414c5f41444452455353455300000000000000000000000000604482015260640162000181565b6001600160a01b038416301415620002395760405162461bcd60e51b815260206004820152600d60248201526c24a72b20a624a22faa27a5a2a760991b604482015260640162000181565b6001600160a01b038316301415620002845760405162461bcd60e51b815260206004820152600d60248201526c24a72b20a624a22faa27a5a2a760991b604482015260640162000181565b612710821115620002cb5760405162461bcd60e51b815260206004820152601060248201526f494e56414c49445f535741505f46454560801b604482015260640162000181565b6001600160601b0319606085811b82166101605284901b166101805260c082905261271082900360e052604080516360a56c0160e11b815290516001600160a01b0387169163c14ad802916004808301926020929190829003018186803b1580156200033657600080fd5b505afa1580156200034b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200037191906200065b565b600481905550846001600160a01b0316630c0a0cd26040518163ffffffff1660e01b815260040160206040518083038186803b158015620003b157600080fd5b505afa158015620003c6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ec9190620004e3565b6001600160a01b0316610100816001600160a01b031660601b81525050846001600160a01b0316634da318276040518163ffffffff1660e01b815260040160206040518083038186803b1580156200044357600080fd5b505afa15801562000458573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047e9190620004e3565b6001600160601b0319606091821b8116610120529086901b166101405260016009558015620004c557600880546001600160e01b0316600160e01b4263ffffffff16021790555b505050505050620006a4565b8051620004de816200068b565b919050565b600060208284031215620004f657600080fd5b815162000503816200068b565b9392505050565b600080600080608085870312156200052157600080fd5b84516200052e816200068b565b602086015190945062000541816200068b565b60408601516060870151919450925080151581146200055f57600080fd5b939692955090935050565b600080604083850312156200057e57600080fd5b82516001600160401b03808211156200059657600080fd5b818501915085601f830112620005ab57600080fd5b815181811115620005c057620005c062000675565b604051601f8201601f19908116603f01168101908382118183101715620005eb57620005eb62000675565b816040528281526020935088848487010111156200060857600080fd5b600091505b828210156200062c57848201840151818301850152908301906200060d565b828211156200063e5760008484830101525b955062000650915050858201620004d1565b925050509250929050565b6000602082840312156200066e57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114620006a157600080fd5b50565b60805160a05160c05160e0516101005160601c6101205160601c6101405160601c6101605160601c6101805160601c613d7662000835600039600081816106060152818161085e0152818161098d01528181610a3b015281816110be015281816111c60152818161145c0152818161179c0152818161180b01528181611b6201528181611cc10152818161221f01528181612530015281816125b70152612e16015260008181610364015281816107da01528181610b2001528181610c4f015281816110920152818161115d015281816114e201528181611748015281816118ec01528181611a5c01528181611c53015281816121a0015281816125ec015281816126d70152612d2c0152600081816105df015261208801526000818161042301528181611aa901528181611baa01528181612bb001528181612c8c01528181612d5f0152612e470152600081816103180152613250015260008181612aee01526134ab01526000818161044a0152818161356d01526135d8015260006113c30152600061129a0152613d766000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c8063627dd56a11610145578063a69840a8116100bd578063c14ad8021161008c578063d21220a711610071578063d21220a714610601578063d505accf14610628578063dd62ed3e1461063b57600080fd5b8063c14ad802146105d1578063cf58879a146105da57600080fd5b8063a69840a814610571578063a8f1f52e14610598578063a9059cbb146105ab578063af8c09bf146105be57600080fd5b80637464fc3d116101145780637ecebe00116100f95780637ecebe001461050b57806392bc32191461052b57806395d89b411461053557600080fd5b80637464fc3d146104ef5780637ba0e2e7146104f857600080fd5b8063627dd56a1461047e57806365dfc7671461049157806367e4ac2c146104ba57806370a08231146104cf57600080fd5b80632a07b6c7116101d8578063499a3c50116101a757806354cf2aeb1161018c57806354cf2aeb146104455780635909c0d51461046c5780635a3d54931461047557600080fd5b8063499a3c501461040b5780634da318271461041e57600080fd5b80632a07b6c7146103a257806330adf81f146103c2578063313ce567146103e95780633644e5151461040357600080fd5b80630c0a0cd2116102145780630c0a0cd2146103135780630dfe16811461035f57806318160ddd1461038657806323b872dd1461038f57600080fd5b8063053da1c81461024657806306fdde031461026c5780630902f1ac146102b5578063095ea7b3146102f0575b600080fd5b610259610254366004613961565b610666565b6040519081526020015b60405180910390f35b6102a86040518060400160405280600e81526020017f5375736869204c5020546f6b656e00000000000000000000000000000000000081525081565b6040516102639190613b3a565b6102bd610d0b565b604080516dffffffffffffffffffffffffffff948516815293909216602084015263ffffffff1690820152606001610263565b6103036102fe366004613844565b610d74565b6040519015158152602001610263565b61033a7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610263565b61033a7f000000000000000000000000000000000000000000000000000000000000000081565b61025960005481565b61030361039d3660046138a9565b610ded565b6103b56103b0366004613961565b610f39565b6040516102639190613ad5565b6102597f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6103f1601281565b60405160ff9091168152602001610263565b610259611296565b610259610419366004613961565b6113e5565b61033a7f000000000000000000000000000000000000000000000000000000000000000081565b6102597f000000000000000000000000000000000000000000000000000000000000000081565b61025960055481565b61025960065481565b61025961048c366004613961565b6115cd565b6104996119bd565b60408051938452602084019290925263ffffffff1690820152606001610263565b6104c2611c31565b6040516102639190613a7b565b6102596104dd366004613695565b60016020526000908152604090205481565b61025960075481565b610259610506366004613961565b611d30565b610259610519366004613695565b60036020526000908152604090205481565b610533612086565b005b6102a86040518060400160405280600381526020017f534c50000000000000000000000000000000000000000000000000000000000081525081565b6102597f54726964656e743a436f6e7374616e7450726f6475637400000000000000000081565b6102596105a6366004613961565b612129565b6103036105b9366004613844565b6122fd565b6102596105cc366004613961565b612382565b61025960045481565b61033a7f000000000000000000000000000000000000000000000000000000000000000081565b61033a7f000000000000000000000000000000000000000000000000000000000000000081565b6105336106363660046138ea565b612794565b610259610649366004613870565b600260209081526000928352604080842090915290825290205481565b60006009546001146106d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f4c4f434b4544000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60026009556000808080806106f087890189613700565b9450945094509450945060008060006107586008546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b9250925092506000836dffffffffffffffffffffffffffff16116107d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f504f4f4c5f554e494e495449414c495a4544000000000000000000000000000060448201526064016106d0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415610a395761085785846dffffffffffffffffffffffffffff16846dffffffffffffffffffffffffffff16612ae6565b98506108857f00000000000000000000000000000000000000000000000000000000000000008a8989612b49565b6040517fbd50c7b1000000000000000000000000000000000000000000000000000000008152339063bd50c7b1906108c1908790600401613b3a565b600060405180830381600087803b1580156108db57600080fd5b505af11580156108ef573d6000803e3d6000fd5b505050506000806108fe612cef565b9150915086856dffffffffffffffffffffffffffff168303101561097e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f494e53554646494349454e545f414d4f554e545f494e0000000000000000000060448201526064016106d0565b61098b8282878787612ec9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fcd3829a3813dc3cdd188fd3d01dcf3268c16be2fdd2dd21d0665418816e460628a8f604051610a2a929190918252602082015260400190565b60405180910390a45050610cf7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614610aee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e56414c49445f494e5055545f544f4b454e0000000000000000000000000060448201526064016106d0565b610b1985836dffffffffffffffffffffffffffff16856dffffffffffffffffffffffffffff16612ae6565b9850610b477f00000000000000000000000000000000000000000000000000000000000000008a8989612b49565b6040517fbd50c7b1000000000000000000000000000000000000000000000000000000008152339063bd50c7b190610b83908790600401613b3a565b600060405180830381600087803b158015610b9d57600080fd5b505af1158015610bb1573d6000803e3d6000fd5b50505050600080610bc0612cef565b9150915086846dffffffffffffffffffffffffffff1682031015610c40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f494e53554646494349454e545f414d4f554e545f494e0000000000000000000060448201526064016106d0565b610c4d8282878787612ec9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fcd3829a3813dc3cdd188fd3d01dcf3268c16be2fdd2dd21d0665418816e460628a8f604051610cec929190918252602082015260400190565b60405180910390a450505b505060016009555094979650505050505050565b6000806000610d696008546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b925092509250909192565b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ddc9086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14610e8a5773ffffffffffffffffffffffffffffffffffffffff8416600090815260026020908152604080832033845290915281208054849290610e84908490613c0f565b90915550505b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602052604081208054849290610ebf908490613c0f565b909155505073ffffffffffffffffffffffffffffffffffffffff808416600081815260016020526040908190208054860190555190918616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f279086815260200190565b60405180910390a35060019392505050565b6060600954600114610fa7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f4c4f434b4544000000000000000000000000000000000000000000000000000060448201526064016106d0565b6002600955600080610fbb8486018661380f565b91509150600080600061101d6008546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b92509250925060008061102e612cef565b3060009081526001602052604081205492945090925061104e87876131a8565b50905060008161105e8685613bd2565b6110689190613b97565b90506000826110778686613bd2565b6110819190613b97565b905061108d308561328f565b6110b97f0000000000000000000000000000000000000000000000000000000000000000838d8d612b49565b6110e57f0000000000000000000000000000000000000000000000000000000000000000828d8d612b49565b818603955080850394506110fc86868b8b8b612ec9565b61110e6111098688613bd2565b613322565b6007556040805160028082526060820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081611127579050509b5060405180604001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602001838152508c6000815181106111ae576111ae613cbd565b602002602001018190525060405180604001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602001828152508c60018151811061121757611217613cbd565b60209081029190910181019190915260408051848152918201839052810185905273ffffffffffffffffffffffffffffffffffffffff8c169033907fa476cebfbe7485684f5578d84d8a64a8afe93a0a2a3047bd6f3e681e108b8f119060600160405180910390a35050600160095550979a9950505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146113c05750604080518082018252600e81527f5375736869204c5020546f6b656e00000000000000000000000000000000000060209182015281518083018352600181527f31000000000000000000000000000000000000000000000000000000000000009082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fc2bf45081e840722410522aa366600d7fe4da5bfb5a5b417f4d5125b4ed180a4818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c0909101909252815191012090565b507f000000000000000000000000000000000000000000000000000000000000000090565b600080806113f584860186613844565b915091506000806114556008546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b50915091507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156114e0576114d983836dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff166134a7565b94506115c3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614611595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f494e56414c49445f4f55545055545f544f4b454e00000000000000000000000060448201526064016106d0565b6115c083826dffffffffffffffffffffffffffff16846dffffffffffffffffffffffffffff166134a7565b94505b5050505092915050565b600060095460011461163b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f4c4f434b4544000000000000000000000000000000000000000000000000000060448201526064016106d0565b600260095560008080611650858701876136b9565b92509250925060008060006116b46008546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b9250925092506000836dffffffffffffffffffffffffffff1611611734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f504f4f4c5f554e494e495449414c495a4544000000000000000000000000000060448201526064016106d0565b60008061173f612cef565b915091506000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161415611809577f00000000000000000000000000000000000000000000000000000000000000009050866dffffffffffffffffffffffffffff16840391506117fd82886dffffffffffffffffffffffffffff16886dffffffffffffffffffffffffffff16612ae6565b9a508a83039250611925565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16146118be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e56414c49445f494e5055545f544f4b454e0000000000000000000000000060448201526064016106d0565b50506008546dffffffffffffffffffffffffffff6e01000000000000000000000000000090910481168203907f00000000000000000000000000000000000000000000000000000000000000009061191d908390888116908a16612ae6565b9a508a840393505b611931818c8b8b612b49565b61193e8484898989612ec9565b8073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fcd3829a3813dc3cdd188fd3d01dcf3268c16be2fdd2dd21d0665418816e46062858f604051610cec929190918252602082015260400190565b600080600080600080611a1f6008546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b6040517f5662311800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526dffffffffffffffffffffffffffff851660248301526000604483015293965091945092507f00000000000000000000000000000000000000000000000000000000000000009091169063566231189060640160206040518083038186803b158015611aed57600080fd5b505afa158015611b01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2591906139d3565b6040517f5662311800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526dffffffffffffffffffffffffffff85166024830152600060448301529197507f00000000000000000000000000000000000000000000000000000000000000009091169063566231189060640160206040518083038186803b158015611bee57600080fd5b505afa158015611c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2691906139d3565b959690945092505050565b60408051600280825260608083018452926020830190803683370190505090507f000000000000000000000000000000000000000000000000000000000000000081600081518110611c8557611c85613cbd565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110611cf357611cf3613cbd565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505090565b6000600954600114611d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f4c4f434b4544000000000000000000000000000000000000000000000000000060448201526064016106d0565b60026009556000611db183850185613695565b90506000806000611e116008546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b925092509250600080611e22612cef565b90925090506000611e366111098385613bd2565b90506000611e546dffffffffffffffffffffffffffff881685613c0f565b90506000611e726dffffffffffffffffffffffffffff881685613c0f565b9050600080611ea384848c6dffffffffffffffffffffffffffff168c6dffffffffffffffffffffffffffff16613512565b9092509050611eb2828b613b4d565b9950611ebe818a613b4d565b9850600080611ecd8c8c6131a8565b915091508160001415611f7057600086118015611eea5750600085115b611f50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f494e56414c49445f414d4f554e5453000000000000000000000000000000000060448201526064016106d0565b611f5c6103e888613c0f565b9d50611f6b60006103e8613615565b611f8c565b80870381611f7e8483613bd2565b611f889190613b97565b9e50505b8d611ff3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f494e53554646494349454e545f4c49515549444954595f4d494e54454400000060448201526064016106d0565b611ffd8d8f613615565b61200a89898e8e8e612ec9565b600787905560408051878152602081018790529081018f90528e9073ffffffffffffffffffffffffffffffffffffffff8f169033907ff9c32fbc56ff04f32a233ebc26e388564223745e28abd8d0781dd906537f563e9060600160405180910390a350506001600955509a9d9c50505050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c14ad8026040518163ffffffff1660e01b815260040160206040518083038186803b1580156120ec57600080fd5b505afa158015612100573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212491906139d3565b600455565b6000808061213984860186613844565b915091506000806121996008546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b50915091507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561221d576114d983836dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff16612ae6565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146122d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e56414c49445f494e5055545f544f4b454e0000000000000000000000000060448201526064016106d0565b6115c083826dffffffffffffffffffffffffffff16846dffffffffffffffffffffffffffff16612ae6565b3360009081526001602052604081208054839190839061231e908490613c0f565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600081815260016020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610ddc9086815260200190565b60006009546001146123f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f4c4f434b4544000000000000000000000000000000000000000000000000000060448201526064016106d0565b600260095560008080612405858701876136b9565b92509250925060008060006124696008546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b30600090815260016020526040812054939650919450925061248b85856131a8565b5090506000816124ab6dffffffffffffffffffffffffffff881685613bd2565b6124b59190613b97565b90506000826124d46dffffffffffffffffffffffffffff881686613bd2565b6124de9190613b97565b90506125216124fd826dffffffffffffffffffffffffffff8916613c0f565b612517846dffffffffffffffffffffffffffff8b16613c0f565b6111099190613bd2565b60075561252e308561328f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614156125ea576125b18283896dffffffffffffffffffffffffffff160383896dffffffffffffffffffffffffffff1603612ae6565b016125de7f0000000000000000000000000000000000000000000000000000000000000000828b8b612b49565b809a5060009150612705565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161461269f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f494e56414c49445f4f55545055545f544f4b454e00000000000000000000000060448201526064016106d0565b6126ce8182886dffffffffffffffffffffffffffff1603848a6dffffffffffffffffffffffffffff1603612ae6565b820191506126fe7f0000000000000000000000000000000000000000000000000000000000000000838b8b612b49565b5098508860005b600080612710612cef565b9150915061272182828b8b8b612ec9565b604080518581526020810185905290810187905273ffffffffffffffffffffffffffffffffffffffff8c169033907fa476cebfbe7485684f5578d84d8a64a8afe93a0a2a3047bd6f3e681e108b8f119060600160405180910390a35050600160095550989b9a5050505050505050505050565b428410156127fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064016106d0565b6000612808611296565b73ffffffffffffffffffffffffffffffffffffffff8916600090815260036020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928c928c928c9290919061286383613c26565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810187905260e001604051602081830303815290604052805190602001206040516020016129049291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa15801561298d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590612a0857508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b612a6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f494e56414c49445f5045524d49545f5349474e4154555245000000000000000060448201526064016106d0565b73ffffffffffffffffffffffffffffffffffffffff81811660009081526002602090815260408083208c8516808552908352928190208b9055518a815291928c16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050505050505050565b600080612b137f000000000000000000000000000000000000000000000000000000000000000086613bd2565b905080612b2261271086613bd2565b612b2c9190613b7f565b612b368483613bd2565b612b409190613b97565b95945050505050565b8015612c32576040517f97da6d3000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152306024830152838116604483015260006064830152608482018590527f000000000000000000000000000000000000000000000000000000000000000016906397da6d309060a4016040805180830381600087803b158015612bf357600080fd5b505af1158015612c07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2b91906139ec565b5050612ce9565b6040517ff18d03cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301528381166044830152606482018590527f0000000000000000000000000000000000000000000000000000000000000000169063f18d03cc90608401600060405180830381600087803b158015612cd057600080fd5b505af1158015612ce4573d6000803e3d6000fd5b505050505b50505050565b6040517ff7888aec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015230602483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f7888aec9060440160206040518083038186803b158015612da157600080fd5b505afa158015612db5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd991906139d3565b6040517ff7888aec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301523060248301529193507f00000000000000000000000000000000000000000000000000000000000000009091169063f7888aec9060440160206040518083038186803b158015612e8b57600080fd5b505afa158015612e9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ec391906139d3565b90509091565b6dffffffffffffffffffffffffffff8511801590612ef557506dffffffffffffffffffffffffffff8411155b612f5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4f564552464c4f5700000000000000000000000000000000000000000000000060448201526064016106d0565b63ffffffff8116612fbd57600880546dffffffffffffffffffffffffffff8681166e010000000000000000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090921690881617179055613168565b4263ffffffff80821690831614801590612fe657506dffffffffffffffffffffffffffff841615155b801561300157506dffffffffffffffffffffffffffff831615155b156130c65781810360006dffffffffffffffffffffffffffff86167bffffffffffffffffffffffffffff0000000000000000000000000000607087901b168161304c5761304c613c8e565b600580549290910463ffffffff851681029092019055905060006dffffffffffffffffffffffffffff8616607088901b7bffffffffffffffffffffffffffff000000000000000000000000000016816130a7576130a7613c8e565b0490508263ffffffff1681026006600082825401925050819055505050505b6008805463ffffffff9092167c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff6dffffffffffffffffffffffffffff8881166e010000000000000000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909516908a161793909317929092169190911790555b60408051868152602081018690527fcf2aa50876cdfbb541206f89af0ee78d44a2abf8d328e37fa4917f982149848a910160405180910390a15050505050565b600080546007549091908015613287576131d86111096dffffffffffffffffffffffffffff808716908816613bd2565b915080821115613287576004546000816131f28486613c0f565b6131fc9087613bd2565b6132069190613bd2565b905060006132148484613bd2565b8561322185612710613c0f565b61322b9190613bd2565b6132359190613b7f565b905060006132438284613b97565b90508015613282576132757f000000000000000000000000000000000000000000000000000000000000000082613615565b61327f8188613b7f565b96505b505050505b509250929050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040812080548392906132c4908490613c0f565b909155505060008054829003815560405182815273ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b60008161333157506000919050565b81600170010000000000000000000000000000000082106133575760809190911c9060401b5b6801000000000000000082106133725760409190911c9060201b5b64010000000082106133895760209190911c9060101b5b62010000821061339e5760109190911c9060081b5b61010082106133b25760089190911c9060041b5b601082106133c55760049190911c9060021b5b600882106133d15760011b5b60018185816133e2576133e2613c8e565b048201901c905060018185816133fa576133fa613c8e565b048201901c9050600181858161341257613412613c8e565b048201901c9050600181858161342a5761342a613c8e565b048201901c9050600181858161344257613442613c8e565b048201901c9050600181858161345a5761345a613c8e565b048201901c9050600181858161347257613472613c8e565b048201901c9050600081858161348a5761348a613c8e565b04905080821061349a578061349c565b815b93505050505b919050565b60007f00000000000000000000000000000000000000000000000000000000000000006134d48584613c0f565b6134de9190613bd2565b6127106134eb8686613bd2565b6134f59190613bd2565b6134ff9190613b97565b61350a906001613b7f565b949350505050565b600080831580613520575082155b156135305750600090508061360c565b60008461353d8589613bd2565b6135479190613b97565b90508581116135a25761355d6127106002613bd2565b6135678288613c0f565b613591907f0000000000000000000000000000000000000000000000000000000000000000613bd2565b61359b9190613b97565b915061360a565b6000846135af8789613bd2565b6135b99190613b97565b90506135c86127106002613bd2565b6135d2828a613c0f565b6135fc907f0000000000000000000000000000000000000000000000000000000000000000613bd2565b6136069190613b97565b9350505b505b94509492505050565b806000808282546136269190613b7f565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101613316565b803580151581146134a257600080fd5b6000602082840312156136a757600080fd5b81356136b281613d1b565b9392505050565b6000806000606084860312156136ce57600080fd5b83356136d981613d1b565b925060208401356136e981613d1b565b91506136f760408501613685565b90509250925092565b600080600080600060a0868803121561371857600080fd5b853561372381613d1b565b9450602086013561373381613d1b565b935061374160408701613685565b925060608601359150608086013567ffffffffffffffff8082111561376557600080fd5b818801915088601f83011261377957600080fd5b81358181111561378b5761378b613cec565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156137d1576137d1613cec565b816040528281528b60208487010111156137ea57600080fd5b8260208601602083013760006020848301015280955050505050509295509295909350565b6000806040838503121561382257600080fd5b823561382d81613d1b565b915061383b60208401613685565b90509250929050565b6000806040838503121561385757600080fd5b823561386281613d1b565b946020939093013593505050565b6000806040838503121561388357600080fd5b823561388e81613d1b565b9150602083013561389e81613d1b565b809150509250929050565b6000806000606084860312156138be57600080fd5b83356138c981613d1b565b925060208401356138d981613d1b565b929592945050506040919091013590565b600080600080600080600060e0888a03121561390557600080fd5b873561391081613d1b565b9650602088013561392081613d1b565b95506040880135945060608801359350608088013560ff8116811461394457600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806020838503121561397457600080fd5b823567ffffffffffffffff8082111561398c57600080fd5b818501915085601f8301126139a057600080fd5b8135818111156139af57600080fd5b8660208285010111156139c157600080fd5b60209290920196919550909350505050565b6000602082840312156139e557600080fd5b5051919050565b600080604083850312156139ff57600080fd5b505080516020909101519092909150565b6000815180845260005b81811015613a3657602081850181015186830182015201613a1a565b81811115613a48576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020808252825182820181905260009190848201906040850190845b81811015613ac957835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101613a97565b50909695505050505050565b602080825282518282018190526000919060409081850190868401855b82811015613b2d578151805173ffffffffffffffffffffffffffffffffffffffff168552860151868501529284019290850190600101613af2565b5091979650505050505050565b6020815260006136b26020830184613a10565b60006dffffffffffffffffffffffffffff808316818516808303821115613b7657613b76613c5f565b01949350505050565b60008219821115613b9257613b92613c5f565b500190565b600082613bcd577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c0a57613c0a613c5f565b500290565b600082821015613c2157613c21613c5f565b500390565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c5857613c58613c5f565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81168114613d3d57600080fd5b5056fea2646970667358221220bb078510fffdf67ed7dc18a1522f433526c7a6cfd9a607fd03877e6111685ff464736f6c63430008070033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102415760003560e01c8063627dd56a11610145578063a69840a8116100bd578063c14ad8021161008c578063d21220a711610071578063d21220a714610601578063d505accf14610628578063dd62ed3e1461063b57600080fd5b8063c14ad802146105d1578063cf58879a146105da57600080fd5b8063a69840a814610571578063a8f1f52e14610598578063a9059cbb146105ab578063af8c09bf146105be57600080fd5b80637464fc3d116101145780637ecebe00116100f95780637ecebe001461050b57806392bc32191461052b57806395d89b411461053557600080fd5b80637464fc3d146104ef5780637ba0e2e7146104f857600080fd5b8063627dd56a1461047e57806365dfc7671461049157806367e4ac2c146104ba57806370a08231146104cf57600080fd5b80632a07b6c7116101d8578063499a3c50116101a757806354cf2aeb1161018c57806354cf2aeb146104455780635909c0d51461046c5780635a3d54931461047557600080fd5b8063499a3c501461040b5780634da318271461041e57600080fd5b80632a07b6c7146103a257806330adf81f146103c2578063313ce567146103e95780633644e5151461040357600080fd5b80630c0a0cd2116102145780630c0a0cd2146103135780630dfe16811461035f57806318160ddd1461038657806323b872dd1461038f57600080fd5b8063053da1c81461024657806306fdde031461026c5780630902f1ac146102b5578063095ea7b3146102f0575b600080fd5b610259610254366004613961565b610666565b6040519081526020015b60405180910390f35b6102a86040518060400160405280600e81526020017f5375736869204c5020546f6b656e00000000000000000000000000000000000081525081565b6040516102639190613b3a565b6102bd610d0b565b604080516dffffffffffffffffffffffffffff948516815293909216602084015263ffffffff1690820152606001610263565b6103036102fe366004613844565b610d74565b6040519015158152602001610263565b61033a7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610263565b61033a7f000000000000000000000000000000000000000000000000000000000000000081565b61025960005481565b61030361039d3660046138a9565b610ded565b6103b56103b0366004613961565b610f39565b6040516102639190613ad5565b6102597f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6103f1601281565b60405160ff9091168152602001610263565b610259611296565b610259610419366004613961565b6113e5565b61033a7f000000000000000000000000000000000000000000000000000000000000000081565b6102597f000000000000000000000000000000000000000000000000000000000000000081565b61025960055481565b61025960065481565b61025961048c366004613961565b6115cd565b6104996119bd565b60408051938452602084019290925263ffffffff1690820152606001610263565b6104c2611c31565b6040516102639190613a7b565b6102596104dd366004613695565b60016020526000908152604090205481565b61025960075481565b610259610506366004613961565b611d30565b610259610519366004613695565b60036020526000908152604090205481565b610533612086565b005b6102a86040518060400160405280600381526020017f534c50000000000000000000000000000000000000000000000000000000000081525081565b6102597f54726964656e743a436f6e7374616e7450726f6475637400000000000000000081565b6102596105a6366004613961565b612129565b6103036105b9366004613844565b6122fd565b6102596105cc366004613961565b612382565b61025960045481565b61033a7f000000000000000000000000000000000000000000000000000000000000000081565b61033a7f000000000000000000000000000000000000000000000000000000000000000081565b6105336106363660046138ea565b612794565b610259610649366004613870565b600260209081526000928352604080842090915290825290205481565b60006009546001146106d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f4c4f434b4544000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60026009556000808080806106f087890189613700565b9450945094509450945060008060006107586008546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b9250925092506000836dffffffffffffffffffffffffffff16116107d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f504f4f4c5f554e494e495449414c495a4544000000000000000000000000000060448201526064016106d0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415610a395761085785846dffffffffffffffffffffffffffff16846dffffffffffffffffffffffffffff16612ae6565b98506108857f00000000000000000000000000000000000000000000000000000000000000008a8989612b49565b6040517fbd50c7b1000000000000000000000000000000000000000000000000000000008152339063bd50c7b1906108c1908790600401613b3a565b600060405180830381600087803b1580156108db57600080fd5b505af11580156108ef573d6000803e3d6000fd5b505050506000806108fe612cef565b9150915086856dffffffffffffffffffffffffffff168303101561097e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f494e53554646494349454e545f414d4f554e545f494e0000000000000000000060448201526064016106d0565b61098b8282878787612ec9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fcd3829a3813dc3cdd188fd3d01dcf3268c16be2fdd2dd21d0665418816e460628a8f604051610a2a929190918252602082015260400190565b60405180910390a45050610cf7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614610aee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e56414c49445f494e5055545f544f4b454e0000000000000000000000000060448201526064016106d0565b610b1985836dffffffffffffffffffffffffffff16856dffffffffffffffffffffffffffff16612ae6565b9850610b477f00000000000000000000000000000000000000000000000000000000000000008a8989612b49565b6040517fbd50c7b1000000000000000000000000000000000000000000000000000000008152339063bd50c7b190610b83908790600401613b3a565b600060405180830381600087803b158015610b9d57600080fd5b505af1158015610bb1573d6000803e3d6000fd5b50505050600080610bc0612cef565b9150915086846dffffffffffffffffffffffffffff1682031015610c40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f494e53554646494349454e545f414d4f554e545f494e0000000000000000000060448201526064016106d0565b610c4d8282878787612ec9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fcd3829a3813dc3cdd188fd3d01dcf3268c16be2fdd2dd21d0665418816e460628a8f604051610cec929190918252602082015260400190565b60405180910390a450505b505060016009555094979650505050505050565b6000806000610d696008546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b925092509250909192565b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ddc9086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14610e8a5773ffffffffffffffffffffffffffffffffffffffff8416600090815260026020908152604080832033845290915281208054849290610e84908490613c0f565b90915550505b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602052604081208054849290610ebf908490613c0f565b909155505073ffffffffffffffffffffffffffffffffffffffff808416600081815260016020526040908190208054860190555190918616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f279086815260200190565b60405180910390a35060019392505050565b6060600954600114610fa7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f4c4f434b4544000000000000000000000000000000000000000000000000000060448201526064016106d0565b6002600955600080610fbb8486018661380f565b91509150600080600061101d6008546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b92509250925060008061102e612cef565b3060009081526001602052604081205492945090925061104e87876131a8565b50905060008161105e8685613bd2565b6110689190613b97565b90506000826110778686613bd2565b6110819190613b97565b905061108d308561328f565b6110b97f0000000000000000000000000000000000000000000000000000000000000000838d8d612b49565b6110e57f0000000000000000000000000000000000000000000000000000000000000000828d8d612b49565b818603955080850394506110fc86868b8b8b612ec9565b61110e6111098688613bd2565b613322565b6007556040805160028082526060820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081611127579050509b5060405180604001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602001838152508c6000815181106111ae576111ae613cbd565b602002602001018190525060405180604001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602001828152508c60018151811061121757611217613cbd565b60209081029190910181019190915260408051848152918201839052810185905273ffffffffffffffffffffffffffffffffffffffff8c169033907fa476cebfbe7485684f5578d84d8a64a8afe93a0a2a3047bd6f3e681e108b8f119060600160405180910390a35050600160095550979a9950505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146113c05750604080518082018252600e81527f5375736869204c5020546f6b656e00000000000000000000000000000000000060209182015281518083018352600181527f31000000000000000000000000000000000000000000000000000000000000009082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fc2bf45081e840722410522aa366600d7fe4da5bfb5a5b417f4d5125b4ed180a4818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c0909101909252815191012090565b507f000000000000000000000000000000000000000000000000000000000000000090565b600080806113f584860186613844565b915091506000806114556008546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b50915091507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156114e0576114d983836dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff166134a7565b94506115c3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614611595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f494e56414c49445f4f55545055545f544f4b454e00000000000000000000000060448201526064016106d0565b6115c083826dffffffffffffffffffffffffffff16846dffffffffffffffffffffffffffff166134a7565b94505b5050505092915050565b600060095460011461163b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f4c4f434b4544000000000000000000000000000000000000000000000000000060448201526064016106d0565b600260095560008080611650858701876136b9565b92509250925060008060006116b46008546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b9250925092506000836dffffffffffffffffffffffffffff1611611734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f504f4f4c5f554e494e495449414c495a4544000000000000000000000000000060448201526064016106d0565b60008061173f612cef565b915091506000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161415611809577f00000000000000000000000000000000000000000000000000000000000000009050866dffffffffffffffffffffffffffff16840391506117fd82886dffffffffffffffffffffffffffff16886dffffffffffffffffffffffffffff16612ae6565b9a508a83039250611925565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16146118be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e56414c49445f494e5055545f544f4b454e0000000000000000000000000060448201526064016106d0565b50506008546dffffffffffffffffffffffffffff6e01000000000000000000000000000090910481168203907f00000000000000000000000000000000000000000000000000000000000000009061191d908390888116908a16612ae6565b9a508a840393505b611931818c8b8b612b49565b61193e8484898989612ec9565b8073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fcd3829a3813dc3cdd188fd3d01dcf3268c16be2fdd2dd21d0665418816e46062858f604051610cec929190918252602082015260400190565b600080600080600080611a1f6008546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b6040517f5662311800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526dffffffffffffffffffffffffffff851660248301526000604483015293965091945092507f00000000000000000000000000000000000000000000000000000000000000009091169063566231189060640160206040518083038186803b158015611aed57600080fd5b505afa158015611b01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2591906139d3565b6040517f5662311800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526dffffffffffffffffffffffffffff85166024830152600060448301529197507f00000000000000000000000000000000000000000000000000000000000000009091169063566231189060640160206040518083038186803b158015611bee57600080fd5b505afa158015611c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2691906139d3565b959690945092505050565b60408051600280825260608083018452926020830190803683370190505090507f000000000000000000000000000000000000000000000000000000000000000081600081518110611c8557611c85613cbd565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110611cf357611cf3613cbd565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505090565b6000600954600114611d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f4c4f434b4544000000000000000000000000000000000000000000000000000060448201526064016106d0565b60026009556000611db183850185613695565b90506000806000611e116008546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b925092509250600080611e22612cef565b90925090506000611e366111098385613bd2565b90506000611e546dffffffffffffffffffffffffffff881685613c0f565b90506000611e726dffffffffffffffffffffffffffff881685613c0f565b9050600080611ea384848c6dffffffffffffffffffffffffffff168c6dffffffffffffffffffffffffffff16613512565b9092509050611eb2828b613b4d565b9950611ebe818a613b4d565b9850600080611ecd8c8c6131a8565b915091508160001415611f7057600086118015611eea5750600085115b611f50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f494e56414c49445f414d4f554e5453000000000000000000000000000000000060448201526064016106d0565b611f5c6103e888613c0f565b9d50611f6b60006103e8613615565b611f8c565b80870381611f7e8483613bd2565b611f889190613b97565b9e50505b8d611ff3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f494e53554646494349454e545f4c49515549444954595f4d494e54454400000060448201526064016106d0565b611ffd8d8f613615565b61200a89898e8e8e612ec9565b600787905560408051878152602081018790529081018f90528e9073ffffffffffffffffffffffffffffffffffffffff8f169033907ff9c32fbc56ff04f32a233ebc26e388564223745e28abd8d0781dd906537f563e9060600160405180910390a350506001600955509a9d9c50505050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c14ad8026040518163ffffffff1660e01b815260040160206040518083038186803b1580156120ec57600080fd5b505afa158015612100573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212491906139d3565b600455565b6000808061213984860186613844565b915091506000806121996008546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b50915091507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561221d576114d983836dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff16612ae6565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146122d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e56414c49445f494e5055545f544f4b454e0000000000000000000000000060448201526064016106d0565b6115c083826dffffffffffffffffffffffffffff16846dffffffffffffffffffffffffffff16612ae6565b3360009081526001602052604081208054839190839061231e908490613c0f565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600081815260016020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610ddc9086815260200190565b60006009546001146123f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f4c4f434b4544000000000000000000000000000000000000000000000000000060448201526064016106d0565b600260095560008080612405858701876136b9565b92509250925060008060006124696008546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b30600090815260016020526040812054939650919450925061248b85856131a8565b5090506000816124ab6dffffffffffffffffffffffffffff881685613bd2565b6124b59190613b97565b90506000826124d46dffffffffffffffffffffffffffff881686613bd2565b6124de9190613b97565b90506125216124fd826dffffffffffffffffffffffffffff8916613c0f565b612517846dffffffffffffffffffffffffffff8b16613c0f565b6111099190613bd2565b60075561252e308561328f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614156125ea576125b18283896dffffffffffffffffffffffffffff160383896dffffffffffffffffffffffffffff1603612ae6565b016125de7f0000000000000000000000000000000000000000000000000000000000000000828b8b612b49565b809a5060009150612705565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161461269f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f494e56414c49445f4f55545055545f544f4b454e00000000000000000000000060448201526064016106d0565b6126ce8182886dffffffffffffffffffffffffffff1603848a6dffffffffffffffffffffffffffff1603612ae6565b820191506126fe7f0000000000000000000000000000000000000000000000000000000000000000838b8b612b49565b5098508860005b600080612710612cef565b9150915061272182828b8b8b612ec9565b604080518581526020810185905290810187905273ffffffffffffffffffffffffffffffffffffffff8c169033907fa476cebfbe7485684f5578d84d8a64a8afe93a0a2a3047bd6f3e681e108b8f119060600160405180910390a35050600160095550989b9a5050505050505050505050565b428410156127fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064016106d0565b6000612808611296565b73ffffffffffffffffffffffffffffffffffffffff8916600090815260036020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928c928c928c9290919061286383613c26565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810187905260e001604051602081830303815290604052805190602001206040516020016129049291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa15801561298d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590612a0857508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b612a6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f494e56414c49445f5045524d49545f5349474e4154555245000000000000000060448201526064016106d0565b73ffffffffffffffffffffffffffffffffffffffff81811660009081526002602090815260408083208c8516808552908352928190208b9055518a815291928c16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050505050505050565b600080612b137f000000000000000000000000000000000000000000000000000000000000000086613bd2565b905080612b2261271086613bd2565b612b2c9190613b7f565b612b368483613bd2565b612b409190613b97565b95945050505050565b8015612c32576040517f97da6d3000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152306024830152838116604483015260006064830152608482018590527f000000000000000000000000000000000000000000000000000000000000000016906397da6d309060a4016040805180830381600087803b158015612bf357600080fd5b505af1158015612c07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2b91906139ec565b5050612ce9565b6040517ff18d03cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301528381166044830152606482018590527f0000000000000000000000000000000000000000000000000000000000000000169063f18d03cc90608401600060405180830381600087803b158015612cd057600080fd5b505af1158015612ce4573d6000803e3d6000fd5b505050505b50505050565b6040517ff7888aec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015230602483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f7888aec9060440160206040518083038186803b158015612da157600080fd5b505afa158015612db5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd991906139d3565b6040517ff7888aec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301523060248301529193507f00000000000000000000000000000000000000000000000000000000000000009091169063f7888aec9060440160206040518083038186803b158015612e8b57600080fd5b505afa158015612e9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ec391906139d3565b90509091565b6dffffffffffffffffffffffffffff8511801590612ef557506dffffffffffffffffffffffffffff8411155b612f5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4f564552464c4f5700000000000000000000000000000000000000000000000060448201526064016106d0565b63ffffffff8116612fbd57600880546dffffffffffffffffffffffffffff8681166e010000000000000000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090921690881617179055613168565b4263ffffffff80821690831614801590612fe657506dffffffffffffffffffffffffffff841615155b801561300157506dffffffffffffffffffffffffffff831615155b156130c65781810360006dffffffffffffffffffffffffffff86167bffffffffffffffffffffffffffff0000000000000000000000000000607087901b168161304c5761304c613c8e565b600580549290910463ffffffff851681029092019055905060006dffffffffffffffffffffffffffff8616607088901b7bffffffffffffffffffffffffffff000000000000000000000000000016816130a7576130a7613c8e565b0490508263ffffffff1681026006600082825401925050819055505050505b6008805463ffffffff9092167c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff6dffffffffffffffffffffffffffff8881166e010000000000000000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909516908a161793909317929092169190911790555b60408051868152602081018690527fcf2aa50876cdfbb541206f89af0ee78d44a2abf8d328e37fa4917f982149848a910160405180910390a15050505050565b600080546007549091908015613287576131d86111096dffffffffffffffffffffffffffff808716908816613bd2565b915080821115613287576004546000816131f28486613c0f565b6131fc9087613bd2565b6132069190613bd2565b905060006132148484613bd2565b8561322185612710613c0f565b61322b9190613bd2565b6132359190613b7f565b905060006132438284613b97565b90508015613282576132757f000000000000000000000000000000000000000000000000000000000000000082613615565b61327f8188613b7f565b96505b505050505b509250929050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040812080548392906132c4908490613c0f565b909155505060008054829003815560405182815273ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b60008161333157506000919050565b81600170010000000000000000000000000000000082106133575760809190911c9060401b5b6801000000000000000082106133725760409190911c9060201b5b64010000000082106133895760209190911c9060101b5b62010000821061339e5760109190911c9060081b5b61010082106133b25760089190911c9060041b5b601082106133c55760049190911c9060021b5b600882106133d15760011b5b60018185816133e2576133e2613c8e565b048201901c905060018185816133fa576133fa613c8e565b048201901c9050600181858161341257613412613c8e565b048201901c9050600181858161342a5761342a613c8e565b048201901c9050600181858161344257613442613c8e565b048201901c9050600181858161345a5761345a613c8e565b048201901c9050600181858161347257613472613c8e565b048201901c9050600081858161348a5761348a613c8e565b04905080821061349a578061349c565b815b93505050505b919050565b60007f00000000000000000000000000000000000000000000000000000000000000006134d48584613c0f565b6134de9190613bd2565b6127106134eb8686613bd2565b6134f59190613bd2565b6134ff9190613b97565b61350a906001613b7f565b949350505050565b600080831580613520575082155b156135305750600090508061360c565b60008461353d8589613bd2565b6135479190613b97565b90508581116135a25761355d6127106002613bd2565b6135678288613c0f565b613591907f0000000000000000000000000000000000000000000000000000000000000000613bd2565b61359b9190613b97565b915061360a565b6000846135af8789613bd2565b6135b99190613b97565b90506135c86127106002613bd2565b6135d2828a613c0f565b6135fc907f0000000000000000000000000000000000000000000000000000000000000000613bd2565b6136069190613b97565b9350505b505b94509492505050565b806000808282546136269190613b7f565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101613316565b803580151581146134a257600080fd5b6000602082840312156136a757600080fd5b81356136b281613d1b565b9392505050565b6000806000606084860312156136ce57600080fd5b83356136d981613d1b565b925060208401356136e981613d1b565b91506136f760408501613685565b90509250925092565b600080600080600060a0868803121561371857600080fd5b853561372381613d1b565b9450602086013561373381613d1b565b935061374160408701613685565b925060608601359150608086013567ffffffffffffffff8082111561376557600080fd5b818801915088601f83011261377957600080fd5b81358181111561378b5761378b613cec565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156137d1576137d1613cec565b816040528281528b60208487010111156137ea57600080fd5b8260208601602083013760006020848301015280955050505050509295509295909350565b6000806040838503121561382257600080fd5b823561382d81613d1b565b915061383b60208401613685565b90509250929050565b6000806040838503121561385757600080fd5b823561386281613d1b565b946020939093013593505050565b6000806040838503121561388357600080fd5b823561388e81613d1b565b9150602083013561389e81613d1b565b809150509250929050565b6000806000606084860312156138be57600080fd5b83356138c981613d1b565b925060208401356138d981613d1b565b929592945050506040919091013590565b600080600080600080600060e0888a03121561390557600080fd5b873561391081613d1b565b9650602088013561392081613d1b565b95506040880135945060608801359350608088013560ff8116811461394457600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806020838503121561397457600080fd5b823567ffffffffffffffff8082111561398c57600080fd5b818501915085601f8301126139a057600080fd5b8135818111156139af57600080fd5b8660208285010111156139c157600080fd5b60209290920196919550909350505050565b6000602082840312156139e557600080fd5b5051919050565b600080604083850312156139ff57600080fd5b505080516020909101519092909150565b6000815180845260005b81811015613a3657602081850181015186830182015201613a1a565b81811115613a48576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020808252825182820181905260009190848201906040850190845b81811015613ac957835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101613a97565b50909695505050505050565b602080825282518282018190526000919060409081850190868401855b82811015613b2d578151805173ffffffffffffffffffffffffffffffffffffffff168552860151868501529284019290850190600101613af2565b5091979650505050505050565b6020815260006136b26020830184613a10565b60006dffffffffffffffffffffffffffff808316818516808303821115613b7657613b76613c5f565b01949350505050565b60008219821115613b9257613b92613c5f565b500190565b600082613bcd577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c0a57613c0a613c5f565b500290565b600082821015613c2157613c21613c5f565b500390565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c5857613c58613c5f565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81168114613d3d57600080fd5b5056fea2646970667358221220bb078510fffdf67ed7dc18a1522f433526c7a6cfd9a607fd03877e6111685ff464736f6c63430008070033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
