{
  "_format": "hh-sol-artifact-1",
  "contractName": "LiquidityModule",
  "sourceName": "contracts/liquidity.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "int24",
          "name": "leftPt",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "rightPt",
          "type": "int24"
        },
        {
          "internalType": "uint128",
          "name": "liquidDelta",
          "type": "uint128"
        }
      ],
      "name": "burn",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountX",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountY",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "int24",
          "name": "leftPt",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "rightPt",
          "type": "int24"
        },
        {
          "internalType": "uint256",
          "name": "amountXLim",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountYLim",
          "type": "uint256"
        }
      ],
      "name": "collect",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "actualAmountX",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "actualAmountY",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "factory",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "fee",
      "outputs": [
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "feeChargePercent",
      "outputs": [
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "feeScaleX_128",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "feeScaleY_128",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "leftMostPt",
      "outputs": [
        {
          "internalType": "int24",
          "name": "",
          "type": "int24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int24",
          "name": "",
          "type": "int24"
        }
      ],
      "name": "limitOrderData",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "sellingX",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "earnY",
          "type": "uint128"
        },
        {
          "internalType": "uint256",
          "name": "accEarnY",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "legacyAccEarnY",
          "type": "uint256"
        },
        {
          "internalType": "uint128",
          "name": "legacyEarnY",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "sellingY",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "earnX",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "legacyEarnX",
          "type": "uint128"
        },
        {
          "internalType": "uint256",
          "name": "accEarnX",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "legacyAccEarnX",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "liquidities",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "liquidity",
          "type": "uint128"
        },
        {
          "internalType": "uint256",
          "name": "lastFeeScaleX_128",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lastFeeScaleY_128",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "tokenOwedX",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "tokenOwedY",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxLiquidPt",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "int24",
          "name": "leftPt",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "rightPt",
          "type": "int24"
        },
        {
          "internalType": "uint128",
          "name": "liquidDelta",
          "type": "uint128"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountX",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountY",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "observations",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "timestamp",
          "type": "uint32"
        },
        {
          "internalType": "int56",
          "name": "accPoint",
          "type": "int56"
        },
        {
          "internalType": "bool",
          "name": "init",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int24",
          "name": "",
          "type": "int24"
        }
      ],
      "name": "orderOrEndpoint",
      "outputs": [
        {
          "internalType": "int24",
          "name": "",
          "type": "int24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int16",
          "name": "",
          "type": "int16"
        }
      ],
      "name": "pointBitmap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pointDelta",
      "outputs": [
        {
          "internalType": "int24",
          "name": "",
          "type": "int24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int24",
          "name": "",
          "type": "int24"
        }
      ],
      "name": "points",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "liquidSum",
          "type": "uint128"
        },
        {
          "internalType": "int128",
          "name": "liquidDelta",
          "type": "int128"
        },
        {
          "internalType": "uint256",
          "name": "accFeeXOut_128",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "accFeeYOut_128",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "isEndpt",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rightMostPt",
      "outputs": [
        {
          "internalType": "int24",
          "name": "",
          "type": "int24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "state",
      "outputs": [
        {
          "internalType": "uint160",
          "name": "sqrtPrice_96",
          "type": "uint160"
        },
        {
          "internalType": "int24",
          "name": "currentPoint",
          "type": "int24"
        },
        {
          "internalType": "uint16",
          "name": "observationCurrentIndex",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "observationQueueLen",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "observationNextQueueLen",
          "type": "uint16"
        },
        {
          "internalType": "bool",
          "name": "locked",
          "type": "bool"
        },
        {
          "internalType": "uint128",
          "name": "liquidity",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "liquidityX",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokenX",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokenY",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalFeeXCharged",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalFeeYCharged",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "userEarnX",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "lastAccEarn",
          "type": "uint256"
        },
        {
          "internalType": "uint128",
          "name": "sellingRemain",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "sellingDec",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "earn",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "legacyEarn",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "earnAssign",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "userEarnY",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "lastAccEarn",
          "type": "uint256"
        },
        {
          "internalType": "uint128",
          "name": "sellingRemain",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "sellingDec",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "earn",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "legacyEarn",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "earnAssign",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50612b3d806100206000396000f3fe608060405234801561001057600080fd5b50600436106101335760003560e01c80631621835f1461013857806316dc165b146101cf5780631aae2e55146101ef578063252c09d71461020657806333005cd5146102405780633c8a7d8d1461024b578063537c2d8e14610273578063588e59ae1461029357806358c51ce61461029c57806362ccaafd146102b05780636d01843b1461030457806375c0e0d51461033657806381794fba146103b9578063872d1f15146103e55780638790aca3146103f857806387e7d5fe146104c657806398a0f72e1461053f578063a34123a71461055f578063b7d19fc414610572578063c19d93fb14610585578063c45a015514610649578063d3b168641461065c578063ddca3f4314610670578063e556289f14610686578063edcba3b214610691575b600080fd5b61018c6101463660046125fe565b600f60205260009081526040902080546001820154600283015460039093015491926001600160801b0380831693600160801b9384900482169383831693048216911686565b604080519687526001600160801b039586166020880152938516938601939093529083166060850152821660808401521660a082015260c0015b60405180910390f35b6002546101e2906001600160a01b031681565b6040516101c691906126e4565b6101f860045481565b6040519081526020016101c6565b6102196102143660046125fe565b6106b4565b6040805163ffffffff909416845260069290920b60208401521515908201526060016101c6565b6101f8620100105481565b61025e6102593660046124dc565b6106e8565b604080519283526020830191909152016101c6565b6000546102809060020b81565b60405160029190910b81526020016101c6565b6101f860055481565b60035461028090600160b81b900460020b81565b61018c6102be3660046125fe565b600e60205260009081526040902080546001820154600283015460039093015491926001600160801b0380831693600160801b9384900482169383831693048216911686565b60005461031e90600160301b90046001600160801b031681565b6040516001600160801b0390911681526020016101c6565b610382610344366004612637565b600b6020526000908152604090208054600182015460028301546003909301546001600160801b03831693600160801b909304600f0b929060ff1685565b604080516001600160801b039096168652600f9490940b60208601529284019190915260608301521515608082015260a0016101c6565b62010016546103d190600160a01b900462ffffff1681565b60405162ffffff90911681526020016101c6565b61025e6103f336600461258a565b610af4565b610465610406366004612637565b600d6020526000908152604090208054600182015460028301546003840154600485015460058601546006909601546001600160801b0380871697600160801b978890048216978583169581900483169480841694919004909216918a565b604080516001600160801b039b8c168152998b1660208b01528901979097526060880195909552928716608087015290861660a0860152851660c085015290931660e0830152610100820192909252610120810191909152610140016101c6565b61050d6104d43660046125fe565b600960205260009081526040902080546001820154600283015460038401546004909401546001600160801b0390931693919290919085565b604080516001600160801b0390961686526020860194909452928401919091526060830152608082015260a0016101c6565b6101f861054d366004612616565b600a6020526000908152604090205481565b61025e61056d366004612651565b610c14565b6003546101e2906001600160a01b031681565b6007546008546105ea916001600160a01b03811691600160a01b820460020b9161ffff600160b81b8204811692600160c81b8304821692600160d81b81049092169160ff600160e81b90910416906001600160801b0380821691600160801b90041688565b604080516001600160a01b03909916895260029790970b602089015261ffff9586169688019690965292841660608701529216608085015290151560a08401526001600160801b0390811660c08401521660e0820152610100016101c6565b6001546101e2906001600160a01b031681565b600054610280906301000000900460020b81565b6003546103d190600160a01b900462ffffff1681565b6101f86201000f5481565b61028061069f366004612637565b600c6020526000908152604090205460020b81565b60108161ffff81106106c557600080fd5b015463ffffffff81169150600160201b810460060b90600160581b900460ff1683565b6000808560020b8760020b126107195760405162461bcd60e51b815260040161071090612732565b60405180910390fd5b600054600290810b810b9088900b121561075a5760405162461bcd60e51b81526020600482015260026024820152614c4f60f01b6044820152606401610710565b60005463010000009004600290810b810b9087900b13156107a25760405162461bcd60e51b8152602060048201526002602482015261484f60f01b6044820152606401610710565b620c35006107b7600289810b9089900b612992565b126107e95760405162461bcd60e51b8152602060048201526002602482015261151360f21b6044820152606401610710565b600354600160b81b900460020b6108008189612a4b565b60020b156108205760405162461bcd60e51b8152600401610710906126f8565b61082a8188612a4b565b60020b1561084a5760405162461bcd60e51b815260040161071090612715565b856000600f82900b136108845760405162461bcd60e51b815260206004820152600260248201526104c560f41b6044820152606401610710565b6001600160a01b038a16610896573399505b60408051610100810182526007546001600160a01b0381168252600160a01b8104600290810b810b900b6020830181905261ffff600160b81b8304811694840194909452600160c81b820484166060840152600160d81b8204909316608083015260ff600160e81b90910416151560a08201526008546001600160801b0380821660c0840152600160801b9091041660e08201529061093c908c908c908c908690610ea3565b600080600061094d8b8e8e876110b4565b6001600160801b031692506001600160801b031692506001600160801b0316925060008111156109a8578a8460c001516109879190612855565b600880546001600160801b0319166001600160801b03929092169190911790555b60008084156109bc576109b9611235565b91505b83156109cd576109ca611319565b90505b60008511806109dc5750600084115b15610a4657336001600160a01b03166384fe2b3d86868f8f6040518563ffffffff1660e01b8152600401610a13949392919061278a565b600060405180830381600087803b158015610a2d57600080fd5b505af1158015610a41573d6000803e3d6000fd5b505050505b8415610a9257610a54611235565b610a5e8684612880565b1115610a925760405162461bcd60e51b815260206004820152600360248201526209c8ab60eb1b6044820152606401610710565b8315610ade57610aa0611319565b610aaa8583612880565b1115610ade5760405162461bcd60e51b81526020600482015260036024820152624e455960e81b6044820152606401610710565b50929e919d50909b505050505050505050505050565b6000806000841180610b065750600083115b610b3a5760405162461bcd60e51b81526020600482015260056024820152640582b593e360dc1b6044820152606401610710565b6000610b496009338989611347565b90508492508060030154831115610b6257806003015492505b8391508060040154821115610b7957806004015491505b82816003016000828254610b8d9190612a19565b9250508190555081816004016000828254610ba89190612a19565b90915550610bbf905083610bba611235565b6113a6565b9250610bcd82610bba611319565b91508215610bec57600254610bec906001600160a01b031689856113c0565b8115610c0957600354610c09906001600160a01b031689846113c0565b509550959350505050565b6000808360020b8560020b12610c3c5760405162461bcd60e51b815260040161071090612732565b600354600160b81b900460020b610c538187612a4b565b60020b15610c735760405162461bcd60e51b8152600401610710906126f8565b610c7d8186612a4b565b60020b15610c9d5760405162461bcd60e51b815260040161071090612715565b60408051610100810182526007546001600160a01b0381168252600160a01b8104600290810b810b900b6020830152600160b81b810461ffff90811693830193909352600160c81b810483166060830152600160d81b81049092166080820152600160e81b90910460ff16151560a08201526008546001600160801b0380821660c08401819052600160801b909204811660e084015260016001607f1b039087161115610d745760405162461bcd60e51b81526020600482015260056024820152644c5131323760d81b6044820152606401610710565b6000610d886001600160801b038816612ac1565b90508081600f0b14610dc15760405162461bcd60e51b8152602060048201526002602482015261444f60f01b6044820152606401610710565b610dd2338a8a848760200151610ea3565b6000610de0888b8b876114c1565b9050600081606001511180610df9575060008160400151115b15610e2557610e0888846129d1565b60808201516001600160801b03908116600160801b029116176008555b8051151580610e38575060008160200151115b15610e8b576000610e4c6009338d8d611347565b90508160000151816003016000828254610e669190612880565b90915550506020820151600482018054600090610e84908490612880565b9091555050505b8051602090910151909a909950975050505050505050565b600354600160b81b900460020b6000610ebf6009888888611347565b60045460055491925090600080600f88900b15610f2e57600054610f0090600b908c906001908b908d90600160301b90046001600160801b03168a8a611769565b60008054919350610f2b91600b918c918b908d90600160301b90046001600160801b03168a8a611769565b90505b600080610f40600b8d8d8c8a8a6119d5565b9092509050610f51878b8484611a68565b8315610ffb576000610f65600c8e8b611bec565b905060008b600f0b1315610fa057610f83600c8e8b60018517611c39565b8060020b60001415610f9b57610f9b600a8e8b611c80565b610ff9565b60028116610fb1600c8f8c84611c39565b8060020b60001415610fc957610fc9600a8f8c611ce8565b5060028d810b810b6000908152600b602052604081208181556001810182905591820155600301805460ff191690555b505b82156110a557600061100f600c8d8b611bec565b905060008b600f0b131561104a5761102d600c8d8b60018517611c39565b8060020b6000141561104557611045600a8d8b611c80565b6110a3565b6002811661105b600c8e8c84611c39565b8060020b6000141561107357611073600a8e8c611ce8565b5060028c810b810b6000908152600b602052604081208181556001810182905591820155600301805460ff191690555b505b50505050505050505050505050565b60208101518151600091829182918291826110ce89611d51565b6006549091506001600160a01b0316600284810b908c900b121561113e5760006110f78c611d51565b905060008560020b8c60020b121561111e576111178e8386866001612163565b905061112f565b61112c8e8387866001612163565b90505b6111398188612880565b965050505b8360020b8a60020b13156111b05760008460020b8c60020b1361116b57611166856001612818565b61116d565b8b5b905060006111808e838e878760016121ea565b9050809950808a6001600160801b0316146111ad5760405162461bcd60e51b81526004016107109061276c565b50505b8360020b8b60020b131580156111cb57508360020b8a60020b135b156111f6576111da8c846122bb565b95506111ef6001600160801b03871686612880565b94506111fb565b600095505b84965084876001600160801b0316146112265760405162461bcd60e51b81526004016107109061274e565b50505050509450945094915050565b600254604051600091829182916001600160a01b0316906370a0823160e01b906112639030906024016126e4565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516112a191906126ab565b600060405180830381855afa9150503d80600081146112dc576040519150601f19603f3d011682016040523d82523d6000602084013e6112e1565b606091505b50915091508180156112f557506020815110155b6112fe57600080fd5b808060200190518101906113129190612693565b9250505090565b600354604051600091829182916001600160a01b0316906370a0823160e01b906112639030906024016126e4565b6040805160609490941b6001600160601b031916602080860191909152600293840b60e890811b60348701529290930b90911b60378401528051601a818503018152603a90930181528251928201929092206000908152929052902090565b6000818310156113b75750816113ba565b50805b92915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161141c91906126ab565b6000604051808303816000865af19150503d8060008114611459576040519150601f19603f3d011682016040523d82523d6000602084013e61145e565b606091505b509150915081801561148857508051158061148857508080602001905181019061148891906125de565b6114ba5760405162461bcd60e51b8152602060048201526003602482015262544e5360e81b6044820152606401610710565b5050505050565b6114fc6040518060a001604052806000815260200160008152602001600081526020016000815260200160006001600160801b031681525090565b6020820151825160009182918261151288611d51565b6006549091506001600160a01b0316600284810b908b900b121561158257600061153b8b611d51565b905060008560020b8b60020b12156115625761155b8d8386866000612163565b9050611573565b6115708d8387866000612163565b90505b61157d8189612880565b975050505b8360020b8960020b13156115d55760008460020b8b60020b136115af576115aa856001612818565b6115b1565b8a5b905060006115c48d838d878760006121ea565b90506115d08188612880565b965050505b8360020b8a60020b131580156115f057508360020b8960020b135b156116df5760008860e001518960c0015161160b91906129d1565b905060008c6001600160801b0316826001600160801b03161061162e578c611630565b815b9050600061163e828f6129d1565b9050611661826001600160801b0316876001600160a01b0316600160601b61232c565b60608b01526001600160a01b038616611687600160601b6001600160801b0384166128e6565b61169191906128d2565b60408b015260e08b01516116a69082906129d1565b6001600160801b031660808b015260608a01516116c3908a612880565b98508960400151886116d59190612880565b9750505050611701565b600060608801819052604088015260e08801516001600160801b031660808801525b6001600160801b0386166020880181905286146117305760405162461bcd60e51b81526004016107109061274e565b6001600160801b038516808852851461175b5760405162461bcd60e51b81526004016107109061276c565b505050505050949350505050565b600287810b900b600090815260208990526040812080546001600160801b0316600f87900b6117bf5760405162461bcd60e51b8152602060048201526002602482015261044360f41b6044820152606401610710565b60008088600f0b1315611827576117d68883612855565b9050816001600160801b0316816001600160801b0316116118225760405162461bcd60e51b8152600401610710906020808252600490820152634c41414f60e01b604082015260600190565b611886565b61183088612a81565b61183a90836129d1565b9050816001600160801b0316816001600160801b0316106118865760405162461bcd60e51b8152600401610710906020808252600490820152634c41534f60e01b604082015260600190565b866001600160801b0316816001600160801b031611156118d35760405162461bcd60e51b8152602060048201526008602482015267130813125348141560c21b6044820152606401610710565b82546001600160801b0319166001600160801b038216178355891561192c578254611909908990600160801b9004600f0b6127c7565b8354600f9190910b6001600160801b03908116600160801b029116178355611962565b8254611943908990600160801b9004600f0b612905565b8354600f9190910b6001600160801b03908116600160801b0291161783555b60006001600160801b0383166119a7575060038301805460ff1916600190811790915560028a810b908d900b126119a25760018401879055600284018690555b6119c5565b6001600160801b0382166119c5575060038301805460ff1916905560015b9c9b505050505050505050505050565b600285810b810b60009081526020889052604080822087840b90930b825281206001830154919283929091908390611a12908b908a908a906123d9565b90506000611a268a8a8a86600101546123f8565b90506000611a3a8c8b8a88600201546123d9565b90506000611a4e8c8c8b88600201546123f8565b93909903919091039c960303995093975050505050505050565b6040805160a08101825285546001600160801b031681526001860154602082015260028601549181019190915260038501546060820152600485015460808201526000600f85900b611af95781516001600160801b0316611af15760405162461bcd60e51b815260206004820152600360248201526204c3e360ec1b6044820152606401610710565b508051611b08565b8151611b05908661240f565b90505b6020820151604083015183519186039190850390600090611b389084906001600160801b0316600160801b61232c565b90506000611b588387600001516001600160801b0316600160801b61232c565b6001600160801b03861687529050600f89900b15611b8a5789546001600160801b0319166001600160801b038616178a555b60018a0188905560028a0187905581151580611ba65750600081115b15611be057818a6003016000828254611bbf9190612880565b92505081905550808a6004016000828254611bda9190612880565b90915550505b50505050505050505050565b6000611bf88284612a4b565b60020b15611c0857506000611c32565b836000611c158486612898565b600290810b810b8252602082019290925260400160002054900b90505b9392505050565b80846000611c478587612898565b60020b60020b815260200190815260200160002060006101000a81548162ffffff021916908360020b62ffffff16021790555050505050565b611c8a8183612a4b565b60020b15611c9757600080fd5b6000611ca38284612898565b9050600281900b60081d6000611cbb61010084612a4b565b600192830b830b60009081526020979097526040909620805460ff9097169290921b909517905550505050565b611cf28183612a4b565b60020b15611cff57600080fd5b6000611d0b8284612898565b9050600281900b60081d6000611d2361010084612a4b565b600192830b830b60009081526020979097526040909620805460ff9097169290921b19909516905550505050565b60008060008360020b12611d68578260020b611d75565b8260020b611d7590612ac1565b9050611d84620d89e719612aa7565b60020b811115611dba5760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401610710565b600060018216611dce57600160801b611de0565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b031690506002821615611e15576080611e10826ffff97272373d413259a46990580e213a6128e6565b901c90505b6004821615611e3f576080611e3a826ffff2e50f5f656932ef12357cf3c7fdcc6128e6565b901c90505b6008821615611e69576080611e64826fffe5caca7e10e4e61c3624eaa0941cd06128e6565b901c90505b6010821615611e93576080611e8e826fffcb9843d60f6159c9db58835c9266446128e6565b901c90505b6020821615611ebd576080611eb8826fff973b41fa98c081472e6896dfb254c06128e6565b901c90505b6040821615611ee7576080611ee2826fff2ea16466c96a3843ec78b326b528616128e6565b901c90505b6080821615611f11576080611f0c826ffe5dee046a99a2a811c461f1969c30536128e6565b901c90505b610100821615611f3c576080611f37826ffcbe86c7900a88aedcffc83b479aa3a46128e6565b901c90505b610200821615611f67576080611f62826ff987a7253ac413176f2b074cf7815e546128e6565b901c90505b610400821615611f92576080611f8d826ff3392b0822b70005940c7a398e4b70f36128e6565b901c90505b610800821615611fbd576080611fb8826fe7159475a2c29b7443b29c7fa6e889d96128e6565b901c90505b611000821615611fe8576080611fe3826fd097f3bdfd2022b8845ad8f792aa58256128e6565b901c90505b61200082161561201357608061200e826fa9f746462d870fdf8a65dc1f90e061e56128e6565b901c90505b61400082161561203e576080612039826f70d869a156d2a1b890bb3df62baf32f76128e6565b901c90505b618000821615612069576080612064826f31be135f97d08fd981231505542fcfa66128e6565b901c90505b62010000821615612095576080612090826f09aa508b5b7a84e1c677de54f3e99bc96128e6565b901c90505b620200008216156120c05760806120bb826e5d6af8dedb81196699c329225ee6046128e6565b901c90505b620400008216156120ea5760806120e5826d2216e584f5fa1ea926041bedfe986128e6565b901c90505b6208000082161561211257608061210d826b048a170391f7dc42444e8fa26128e6565b901c90505b60008460020b131561212d5761212a816000196128d2565b90505b61213b600160201b82612a6d565b1561214757600161214a565b60005b61215b9060ff16602083901c612880565b949350505050565b60008061217086866129f9565b90506000612182600160601b866129f9565b9050836121b6576121af886001600160801b0316836001600160a01b0316836001600160a01b031661232c565b92506121df565b6121dc886001600160801b0316836001600160a01b0316836001600160a01b0316612440565b92505b505095945050505050565b6000806121ff6121fa8888612955565b611d51565b90506000846001600160a01b0316600160601b876001600160a01b031661222691906128e6565b61223091906128d2565b90506000612242600160601b846129f9565b9050600061225083896129f9565b9050856122845761227d8b6001600160801b0316836001600160a01b0316836001600160a01b031661232c565b94506122ad565b6122aa8b6001600160801b0316836001600160a01b0316836001600160a01b0316612440565b94505b505050509695505050505050565b6000806122df846001600160801b0316846001600160a01b0316600160601b612440565b905080915080826001600160801b0316146123255760405162461bcd60e51b81526020600482015260066024820152651650c813d19360d21b6044820152606401610710565b5092915050565b600080806000198587098587029250828110838203039150508060001415612366576000841161235b57600080fd5b508290049050611c32565b80841161237257600080fd5b6000848688096001861981018716968790046003810260029081188083028203028083028203028083028203028083028203028083028203029182029003026000889003889004909101858311909403939093029303949094049190911702949350505050565b60008360020b8560020b136123ef57508061215b565b50900392915050565b60008360020b8560020b13156123ef57508061215b565b60008082600f0b12156124365761242582612a81565b61242f90846129d1565b90506113ba565b611c328284612855565b600061244d84848461232c565b90506000828061246d57634e487b7160e01b600052601260045260246000fd5b8486091115611c3257600019811061248457600080fd5b8061248e81612a30565b95945050505050565b80356001600160a01b03811681146124ae57600080fd5b919050565b8035600281900b81146124ae57600080fd5b80356001600160801b03811681146124ae57600080fd5b60008060008060008060a087890312156124f4578182fd5b6124fd87612497565b955061250b602088016124b3565b9450612519604088016124b3565b9350612527606088016124c5565b925060808701356001600160401b0380821115612542578384fd5b818901915089601f830112612555578384fd5b813581811115612563578485fd5b8a6020828501011115612574578485fd5b6020830194508093505050509295509295509295565b600080600080600060a086880312156125a1578081fd5b6125aa86612497565b94506125b8602087016124b3565b93506125c6604087016124b3565b94979396509394606081013594506080013592915050565b6000602082840312156125ef578081fd5b81518015158114611c32578182fd5b60006020828403121561260f578081fd5b5035919050565b600060208284031215612627578081fd5b81358060010b8114611c32578182fd5b600060208284031215612648578081fd5b611c32826124b3565b600080600060608486031215612665578283fd5b61266e846124b3565b925061267c602085016124b3565b915061268a604085016124c5565b90509250925092565b6000602082840312156126a4578081fd5b5051919050565b60008251815b818110156126cb57602081860181015185830152016126b1565b818111156126d95782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b60208082526003908201526213141160ea1b604082015260600190565b60208082526003908201526214941160ea1b604082015260600190565b602080825260029082015261262960f11b604082015260600190565b6020808252600490820152631653d19360e21b604082015260600190565b6020808252600490820152631613d19360e21b604082015260600190565b84815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b6000600f82810b9084900b828212801560016001607f1b03849003831316156127f2576127f2612adb565b60016001607f1b0319839003821281161561280f5761280f612adb565b50019392505050565b60008160020b8360020b82821282627fffff0382138115161561283d5761283d612adb565b82627fffff1903821281161561280f5761280f612adb565b60006001600160801b0382811684821680830382111561287757612877612adb565b01949350505050565b6000821982111561289357612893612adb565b500190565b60008160020b8360020b806128af576128af612af1565b627fffff198214600019821416156128c9576128c9612adb565b90059392505050565b6000826128e1576128e1612af1565b500490565b600081600019048311821515161561290057612900612adb565b500290565b6000600f82810b9084900b828112801560016001607f1b031983018412161561293057612930612adb565b60016001607f1b038201831381161561294b5761294b612adb565b5090039392505050565b60008160020b8360020b82811281627fffff190183128115161561297b5761297b612adb565b81627fffff01831381161561294b5761294b612adb565b60008083128015600160ff1b8501841216156129b0576129b0612adb565b6001600160ff1b03840183138116156129cb576129cb612adb565b50500390565b60006001600160801b03838116908316818110156129f1576129f1612adb565b039392505050565b60006001600160a01b03838116908316818110156129f1576129f1612adb565b600082821015612a2b57612a2b612adb565b500390565b6000600019821415612a4457612a44612adb565b5060010190565b60008260020b80612a5e57612a5e612af1565b808360020b0791505092915050565b600082612a7c57612a7c612af1565b500690565b6000600f82900b60016001607f1b0319811415612aa057612aa0612adb565b9003919050565b60008160020b627fffff19811415612aa057612aa0612adb565b6000600160ff1b821415612ad757612ad7612adb565b0390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fdfea26469706673582212209ff097f026b850eb1ed686dbed4660397b825b74662ec2645bf12e3047b88e8b64736f6c63430008040033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101335760003560e01c80631621835f1461013857806316dc165b146101cf5780631aae2e55146101ef578063252c09d71461020657806333005cd5146102405780633c8a7d8d1461024b578063537c2d8e14610273578063588e59ae1461029357806358c51ce61461029c57806362ccaafd146102b05780636d01843b1461030457806375c0e0d51461033657806381794fba146103b9578063872d1f15146103e55780638790aca3146103f857806387e7d5fe146104c657806398a0f72e1461053f578063a34123a71461055f578063b7d19fc414610572578063c19d93fb14610585578063c45a015514610649578063d3b168641461065c578063ddca3f4314610670578063e556289f14610686578063edcba3b214610691575b600080fd5b61018c6101463660046125fe565b600f60205260009081526040902080546001820154600283015460039093015491926001600160801b0380831693600160801b9384900482169383831693048216911686565b604080519687526001600160801b039586166020880152938516938601939093529083166060850152821660808401521660a082015260c0015b60405180910390f35b6002546101e2906001600160a01b031681565b6040516101c691906126e4565b6101f860045481565b6040519081526020016101c6565b6102196102143660046125fe565b6106b4565b6040805163ffffffff909416845260069290920b60208401521515908201526060016101c6565b6101f8620100105481565b61025e6102593660046124dc565b6106e8565b604080519283526020830191909152016101c6565b6000546102809060020b81565b60405160029190910b81526020016101c6565b6101f860055481565b60035461028090600160b81b900460020b81565b61018c6102be3660046125fe565b600e60205260009081526040902080546001820154600283015460039093015491926001600160801b0380831693600160801b9384900482169383831693048216911686565b60005461031e90600160301b90046001600160801b031681565b6040516001600160801b0390911681526020016101c6565b610382610344366004612637565b600b6020526000908152604090208054600182015460028301546003909301546001600160801b03831693600160801b909304600f0b929060ff1685565b604080516001600160801b039096168652600f9490940b60208601529284019190915260608301521515608082015260a0016101c6565b62010016546103d190600160a01b900462ffffff1681565b60405162ffffff90911681526020016101c6565b61025e6103f336600461258a565b610af4565b610465610406366004612637565b600d6020526000908152604090208054600182015460028301546003840154600485015460058601546006909601546001600160801b0380871697600160801b978890048216978583169581900483169480841694919004909216918a565b604080516001600160801b039b8c168152998b1660208b01528901979097526060880195909552928716608087015290861660a0860152851660c085015290931660e0830152610100820192909252610120810191909152610140016101c6565b61050d6104d43660046125fe565b600960205260009081526040902080546001820154600283015460038401546004909401546001600160801b0390931693919290919085565b604080516001600160801b0390961686526020860194909452928401919091526060830152608082015260a0016101c6565b6101f861054d366004612616565b600a6020526000908152604090205481565b61025e61056d366004612651565b610c14565b6003546101e2906001600160a01b031681565b6007546008546105ea916001600160a01b03811691600160a01b820460020b9161ffff600160b81b8204811692600160c81b8304821692600160d81b81049092169160ff600160e81b90910416906001600160801b0380821691600160801b90041688565b604080516001600160a01b03909916895260029790970b602089015261ffff9586169688019690965292841660608701529216608085015290151560a08401526001600160801b0390811660c08401521660e0820152610100016101c6565b6001546101e2906001600160a01b031681565b600054610280906301000000900460020b81565b6003546103d190600160a01b900462ffffff1681565b6101f86201000f5481565b61028061069f366004612637565b600c6020526000908152604090205460020b81565b60108161ffff81106106c557600080fd5b015463ffffffff81169150600160201b810460060b90600160581b900460ff1683565b6000808560020b8760020b126107195760405162461bcd60e51b815260040161071090612732565b60405180910390fd5b600054600290810b810b9088900b121561075a5760405162461bcd60e51b81526020600482015260026024820152614c4f60f01b6044820152606401610710565b60005463010000009004600290810b810b9087900b13156107a25760405162461bcd60e51b8152602060048201526002602482015261484f60f01b6044820152606401610710565b620c35006107b7600289810b9089900b612992565b126107e95760405162461bcd60e51b8152602060048201526002602482015261151360f21b6044820152606401610710565b600354600160b81b900460020b6108008189612a4b565b60020b156108205760405162461bcd60e51b8152600401610710906126f8565b61082a8188612a4b565b60020b1561084a5760405162461bcd60e51b815260040161071090612715565b856000600f82900b136108845760405162461bcd60e51b815260206004820152600260248201526104c560f41b6044820152606401610710565b6001600160a01b038a16610896573399505b60408051610100810182526007546001600160a01b0381168252600160a01b8104600290810b810b900b6020830181905261ffff600160b81b8304811694840194909452600160c81b820484166060840152600160d81b8204909316608083015260ff600160e81b90910416151560a08201526008546001600160801b0380821660c0840152600160801b9091041660e08201529061093c908c908c908c908690610ea3565b600080600061094d8b8e8e876110b4565b6001600160801b031692506001600160801b031692506001600160801b0316925060008111156109a8578a8460c001516109879190612855565b600880546001600160801b0319166001600160801b03929092169190911790555b60008084156109bc576109b9611235565b91505b83156109cd576109ca611319565b90505b60008511806109dc5750600084115b15610a4657336001600160a01b03166384fe2b3d86868f8f6040518563ffffffff1660e01b8152600401610a13949392919061278a565b600060405180830381600087803b158015610a2d57600080fd5b505af1158015610a41573d6000803e3d6000fd5b505050505b8415610a9257610a54611235565b610a5e8684612880565b1115610a925760405162461bcd60e51b815260206004820152600360248201526209c8ab60eb1b6044820152606401610710565b8315610ade57610aa0611319565b610aaa8583612880565b1115610ade5760405162461bcd60e51b81526020600482015260036024820152624e455960e81b6044820152606401610710565b50929e919d50909b505050505050505050505050565b6000806000841180610b065750600083115b610b3a5760405162461bcd60e51b81526020600482015260056024820152640582b593e360dc1b6044820152606401610710565b6000610b496009338989611347565b90508492508060030154831115610b6257806003015492505b8391508060040154821115610b7957806004015491505b82816003016000828254610b8d9190612a19565b9250508190555081816004016000828254610ba89190612a19565b90915550610bbf905083610bba611235565b6113a6565b9250610bcd82610bba611319565b91508215610bec57600254610bec906001600160a01b031689856113c0565b8115610c0957600354610c09906001600160a01b031689846113c0565b509550959350505050565b6000808360020b8560020b12610c3c5760405162461bcd60e51b815260040161071090612732565b600354600160b81b900460020b610c538187612a4b565b60020b15610c735760405162461bcd60e51b8152600401610710906126f8565b610c7d8186612a4b565b60020b15610c9d5760405162461bcd60e51b815260040161071090612715565b60408051610100810182526007546001600160a01b0381168252600160a01b8104600290810b810b900b6020830152600160b81b810461ffff90811693830193909352600160c81b810483166060830152600160d81b81049092166080820152600160e81b90910460ff16151560a08201526008546001600160801b0380821660c08401819052600160801b909204811660e084015260016001607f1b039087161115610d745760405162461bcd60e51b81526020600482015260056024820152644c5131323760d81b6044820152606401610710565b6000610d886001600160801b038816612ac1565b90508081600f0b14610dc15760405162461bcd60e51b8152602060048201526002602482015261444f60f01b6044820152606401610710565b610dd2338a8a848760200151610ea3565b6000610de0888b8b876114c1565b9050600081606001511180610df9575060008160400151115b15610e2557610e0888846129d1565b60808201516001600160801b03908116600160801b029116176008555b8051151580610e38575060008160200151115b15610e8b576000610e4c6009338d8d611347565b90508160000151816003016000828254610e669190612880565b90915550506020820151600482018054600090610e84908490612880565b9091555050505b8051602090910151909a909950975050505050505050565b600354600160b81b900460020b6000610ebf6009888888611347565b60045460055491925090600080600f88900b15610f2e57600054610f0090600b908c906001908b908d90600160301b90046001600160801b03168a8a611769565b60008054919350610f2b91600b918c918b908d90600160301b90046001600160801b03168a8a611769565b90505b600080610f40600b8d8d8c8a8a6119d5565b9092509050610f51878b8484611a68565b8315610ffb576000610f65600c8e8b611bec565b905060008b600f0b1315610fa057610f83600c8e8b60018517611c39565b8060020b60001415610f9b57610f9b600a8e8b611c80565b610ff9565b60028116610fb1600c8f8c84611c39565b8060020b60001415610fc957610fc9600a8f8c611ce8565b5060028d810b810b6000908152600b602052604081208181556001810182905591820155600301805460ff191690555b505b82156110a557600061100f600c8d8b611bec565b905060008b600f0b131561104a5761102d600c8d8b60018517611c39565b8060020b6000141561104557611045600a8d8b611c80565b6110a3565b6002811661105b600c8e8c84611c39565b8060020b6000141561107357611073600a8e8c611ce8565b5060028c810b810b6000908152600b602052604081208181556001810182905591820155600301805460ff191690555b505b50505050505050505050505050565b60208101518151600091829182918291826110ce89611d51565b6006549091506001600160a01b0316600284810b908c900b121561113e5760006110f78c611d51565b905060008560020b8c60020b121561111e576111178e8386866001612163565b905061112f565b61112c8e8387866001612163565b90505b6111398188612880565b965050505b8360020b8a60020b13156111b05760008460020b8c60020b1361116b57611166856001612818565b61116d565b8b5b905060006111808e838e878760016121ea565b9050809950808a6001600160801b0316146111ad5760405162461bcd60e51b81526004016107109061276c565b50505b8360020b8b60020b131580156111cb57508360020b8a60020b135b156111f6576111da8c846122bb565b95506111ef6001600160801b03871686612880565b94506111fb565b600095505b84965084876001600160801b0316146112265760405162461bcd60e51b81526004016107109061274e565b50505050509450945094915050565b600254604051600091829182916001600160a01b0316906370a0823160e01b906112639030906024016126e4565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516112a191906126ab565b600060405180830381855afa9150503d80600081146112dc576040519150601f19603f3d011682016040523d82523d6000602084013e6112e1565b606091505b50915091508180156112f557506020815110155b6112fe57600080fd5b808060200190518101906113129190612693565b9250505090565b600354604051600091829182916001600160a01b0316906370a0823160e01b906112639030906024016126e4565b6040805160609490941b6001600160601b031916602080860191909152600293840b60e890811b60348701529290930b90911b60378401528051601a818503018152603a90930181528251928201929092206000908152929052902090565b6000818310156113b75750816113ba565b50805b92915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161141c91906126ab565b6000604051808303816000865af19150503d8060008114611459576040519150601f19603f3d011682016040523d82523d6000602084013e61145e565b606091505b509150915081801561148857508051158061148857508080602001905181019061148891906125de565b6114ba5760405162461bcd60e51b8152602060048201526003602482015262544e5360e81b6044820152606401610710565b5050505050565b6114fc6040518060a001604052806000815260200160008152602001600081526020016000815260200160006001600160801b031681525090565b6020820151825160009182918261151288611d51565b6006549091506001600160a01b0316600284810b908b900b121561158257600061153b8b611d51565b905060008560020b8b60020b12156115625761155b8d8386866000612163565b9050611573565b6115708d8387866000612163565b90505b61157d8189612880565b975050505b8360020b8960020b13156115d55760008460020b8b60020b136115af576115aa856001612818565b6115b1565b8a5b905060006115c48d838d878760006121ea565b90506115d08188612880565b965050505b8360020b8a60020b131580156115f057508360020b8960020b135b156116df5760008860e001518960c0015161160b91906129d1565b905060008c6001600160801b0316826001600160801b03161061162e578c611630565b815b9050600061163e828f6129d1565b9050611661826001600160801b0316876001600160a01b0316600160601b61232c565b60608b01526001600160a01b038616611687600160601b6001600160801b0384166128e6565b61169191906128d2565b60408b015260e08b01516116a69082906129d1565b6001600160801b031660808b015260608a01516116c3908a612880565b98508960400151886116d59190612880565b9750505050611701565b600060608801819052604088015260e08801516001600160801b031660808801525b6001600160801b0386166020880181905286146117305760405162461bcd60e51b81526004016107109061274e565b6001600160801b038516808852851461175b5760405162461bcd60e51b81526004016107109061276c565b505050505050949350505050565b600287810b900b600090815260208990526040812080546001600160801b0316600f87900b6117bf5760405162461bcd60e51b8152602060048201526002602482015261044360f41b6044820152606401610710565b60008088600f0b1315611827576117d68883612855565b9050816001600160801b0316816001600160801b0316116118225760405162461bcd60e51b8152600401610710906020808252600490820152634c41414f60e01b604082015260600190565b611886565b61183088612a81565b61183a90836129d1565b9050816001600160801b0316816001600160801b0316106118865760405162461bcd60e51b8152600401610710906020808252600490820152634c41534f60e01b604082015260600190565b866001600160801b0316816001600160801b031611156118d35760405162461bcd60e51b8152602060048201526008602482015267130813125348141560c21b6044820152606401610710565b82546001600160801b0319166001600160801b038216178355891561192c578254611909908990600160801b9004600f0b6127c7565b8354600f9190910b6001600160801b03908116600160801b029116178355611962565b8254611943908990600160801b9004600f0b612905565b8354600f9190910b6001600160801b03908116600160801b0291161783555b60006001600160801b0383166119a7575060038301805460ff1916600190811790915560028a810b908d900b126119a25760018401879055600284018690555b6119c5565b6001600160801b0382166119c5575060038301805460ff1916905560015b9c9b505050505050505050505050565b600285810b810b60009081526020889052604080822087840b90930b825281206001830154919283929091908390611a12908b908a908a906123d9565b90506000611a268a8a8a86600101546123f8565b90506000611a3a8c8b8a88600201546123d9565b90506000611a4e8c8c8b88600201546123f8565b93909903919091039c960303995093975050505050505050565b6040805160a08101825285546001600160801b031681526001860154602082015260028601549181019190915260038501546060820152600485015460808201526000600f85900b611af95781516001600160801b0316611af15760405162461bcd60e51b815260206004820152600360248201526204c3e360ec1b6044820152606401610710565b508051611b08565b8151611b05908661240f565b90505b6020820151604083015183519186039190850390600090611b389084906001600160801b0316600160801b61232c565b90506000611b588387600001516001600160801b0316600160801b61232c565b6001600160801b03861687529050600f89900b15611b8a5789546001600160801b0319166001600160801b038616178a555b60018a0188905560028a0187905581151580611ba65750600081115b15611be057818a6003016000828254611bbf9190612880565b92505081905550808a6004016000828254611bda9190612880565b90915550505b50505050505050505050565b6000611bf88284612a4b565b60020b15611c0857506000611c32565b836000611c158486612898565b600290810b810b8252602082019290925260400160002054900b90505b9392505050565b80846000611c478587612898565b60020b60020b815260200190815260200160002060006101000a81548162ffffff021916908360020b62ffffff16021790555050505050565b611c8a8183612a4b565b60020b15611c9757600080fd5b6000611ca38284612898565b9050600281900b60081d6000611cbb61010084612a4b565b600192830b830b60009081526020979097526040909620805460ff9097169290921b909517905550505050565b611cf28183612a4b565b60020b15611cff57600080fd5b6000611d0b8284612898565b9050600281900b60081d6000611d2361010084612a4b565b600192830b830b60009081526020979097526040909620805460ff9097169290921b19909516905550505050565b60008060008360020b12611d68578260020b611d75565b8260020b611d7590612ac1565b9050611d84620d89e719612aa7565b60020b811115611dba5760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401610710565b600060018216611dce57600160801b611de0565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b031690506002821615611e15576080611e10826ffff97272373d413259a46990580e213a6128e6565b901c90505b6004821615611e3f576080611e3a826ffff2e50f5f656932ef12357cf3c7fdcc6128e6565b901c90505b6008821615611e69576080611e64826fffe5caca7e10e4e61c3624eaa0941cd06128e6565b901c90505b6010821615611e93576080611e8e826fffcb9843d60f6159c9db58835c9266446128e6565b901c90505b6020821615611ebd576080611eb8826fff973b41fa98c081472e6896dfb254c06128e6565b901c90505b6040821615611ee7576080611ee2826fff2ea16466c96a3843ec78b326b528616128e6565b901c90505b6080821615611f11576080611f0c826ffe5dee046a99a2a811c461f1969c30536128e6565b901c90505b610100821615611f3c576080611f37826ffcbe86c7900a88aedcffc83b479aa3a46128e6565b901c90505b610200821615611f67576080611f62826ff987a7253ac413176f2b074cf7815e546128e6565b901c90505b610400821615611f92576080611f8d826ff3392b0822b70005940c7a398e4b70f36128e6565b901c90505b610800821615611fbd576080611fb8826fe7159475a2c29b7443b29c7fa6e889d96128e6565b901c90505b611000821615611fe8576080611fe3826fd097f3bdfd2022b8845ad8f792aa58256128e6565b901c90505b61200082161561201357608061200e826fa9f746462d870fdf8a65dc1f90e061e56128e6565b901c90505b61400082161561203e576080612039826f70d869a156d2a1b890bb3df62baf32f76128e6565b901c90505b618000821615612069576080612064826f31be135f97d08fd981231505542fcfa66128e6565b901c90505b62010000821615612095576080612090826f09aa508b5b7a84e1c677de54f3e99bc96128e6565b901c90505b620200008216156120c05760806120bb826e5d6af8dedb81196699c329225ee6046128e6565b901c90505b620400008216156120ea5760806120e5826d2216e584f5fa1ea926041bedfe986128e6565b901c90505b6208000082161561211257608061210d826b048a170391f7dc42444e8fa26128e6565b901c90505b60008460020b131561212d5761212a816000196128d2565b90505b61213b600160201b82612a6d565b1561214757600161214a565b60005b61215b9060ff16602083901c612880565b949350505050565b60008061217086866129f9565b90506000612182600160601b866129f9565b9050836121b6576121af886001600160801b0316836001600160a01b0316836001600160a01b031661232c565b92506121df565b6121dc886001600160801b0316836001600160a01b0316836001600160a01b0316612440565b92505b505095945050505050565b6000806121ff6121fa8888612955565b611d51565b90506000846001600160a01b0316600160601b876001600160a01b031661222691906128e6565b61223091906128d2565b90506000612242600160601b846129f9565b9050600061225083896129f9565b9050856122845761227d8b6001600160801b0316836001600160a01b0316836001600160a01b031661232c565b94506122ad565b6122aa8b6001600160801b0316836001600160a01b0316836001600160a01b0316612440565b94505b505050509695505050505050565b6000806122df846001600160801b0316846001600160a01b0316600160601b612440565b905080915080826001600160801b0316146123255760405162461bcd60e51b81526020600482015260066024820152651650c813d19360d21b6044820152606401610710565b5092915050565b600080806000198587098587029250828110838203039150508060001415612366576000841161235b57600080fd5b508290049050611c32565b80841161237257600080fd5b6000848688096001861981018716968790046003810260029081188083028203028083028203028083028203028083028203028083028203029182029003026000889003889004909101858311909403939093029303949094049190911702949350505050565b60008360020b8560020b136123ef57508061215b565b50900392915050565b60008360020b8560020b13156123ef57508061215b565b60008082600f0b12156124365761242582612a81565b61242f90846129d1565b90506113ba565b611c328284612855565b600061244d84848461232c565b90506000828061246d57634e487b7160e01b600052601260045260246000fd5b8486091115611c3257600019811061248457600080fd5b8061248e81612a30565b95945050505050565b80356001600160a01b03811681146124ae57600080fd5b919050565b8035600281900b81146124ae57600080fd5b80356001600160801b03811681146124ae57600080fd5b60008060008060008060a087890312156124f4578182fd5b6124fd87612497565b955061250b602088016124b3565b9450612519604088016124b3565b9350612527606088016124c5565b925060808701356001600160401b0380821115612542578384fd5b818901915089601f830112612555578384fd5b813581811115612563578485fd5b8a6020828501011115612574578485fd5b6020830194508093505050509295509295509295565b600080600080600060a086880312156125a1578081fd5b6125aa86612497565b94506125b8602087016124b3565b93506125c6604087016124b3565b94979396509394606081013594506080013592915050565b6000602082840312156125ef578081fd5b81518015158114611c32578182fd5b60006020828403121561260f578081fd5b5035919050565b600060208284031215612627578081fd5b81358060010b8114611c32578182fd5b600060208284031215612648578081fd5b611c32826124b3565b600080600060608486031215612665578283fd5b61266e846124b3565b925061267c602085016124b3565b915061268a604085016124c5565b90509250925092565b6000602082840312156126a4578081fd5b5051919050565b60008251815b818110156126cb57602081860181015185830152016126b1565b818111156126d95782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b60208082526003908201526213141160ea1b604082015260600190565b60208082526003908201526214941160ea1b604082015260600190565b602080825260029082015261262960f11b604082015260600190565b6020808252600490820152631653d19360e21b604082015260600190565b6020808252600490820152631613d19360e21b604082015260600190565b84815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b6000600f82810b9084900b828212801560016001607f1b03849003831316156127f2576127f2612adb565b60016001607f1b0319839003821281161561280f5761280f612adb565b50019392505050565b60008160020b8360020b82821282627fffff0382138115161561283d5761283d612adb565b82627fffff1903821281161561280f5761280f612adb565b60006001600160801b0382811684821680830382111561287757612877612adb565b01949350505050565b6000821982111561289357612893612adb565b500190565b60008160020b8360020b806128af576128af612af1565b627fffff198214600019821416156128c9576128c9612adb565b90059392505050565b6000826128e1576128e1612af1565b500490565b600081600019048311821515161561290057612900612adb565b500290565b6000600f82810b9084900b828112801560016001607f1b031983018412161561293057612930612adb565b60016001607f1b038201831381161561294b5761294b612adb565b5090039392505050565b60008160020b8360020b82811281627fffff190183128115161561297b5761297b612adb565b81627fffff01831381161561294b5761294b612adb565b60008083128015600160ff1b8501841216156129b0576129b0612adb565b6001600160ff1b03840183138116156129cb576129cb612adb565b50500390565b60006001600160801b03838116908316818110156129f1576129f1612adb565b039392505050565b60006001600160a01b03838116908316818110156129f1576129f1612adb565b600082821015612a2b57612a2b612adb565b500390565b6000600019821415612a4457612a44612adb565b5060010190565b60008260020b80612a5e57612a5e612af1565b808360020b0791505092915050565b600082612a7c57612a7c612af1565b500690565b6000600f82900b60016001607f1b0319811415612aa057612aa0612adb565b9003919050565b60008160020b627fffff19811415612aa057612aa0612adb565b6000600160ff1b821415612ad757612ad7612adb565b0390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fdfea26469706673582212209ff097f026b850eb1ed686dbed4660397b825b74662ec2645bf12e3047b88e8b64736f6c63430008040033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
