{
  "_format": "hh-sol-artifact-1",
  "contractName": "KFCV3Factory",
  "sourceName": "contracts/KFCV3Factory.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint24",
          "name": "fee",
          "type": "uint24"
        },
        {
          "indexed": true,
          "internalType": "int24",
          "name": "tickSpacing",
          "type": "int24"
        }
      ],
      "name": "FeeAmountEnabled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnerChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token0",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token1",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint24",
          "name": "fee",
          "type": "uint24"
        },
        {
          "indexed": false,
          "internalType": "int24",
          "name": "tickSpacing",
          "type": "int24"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "pool",
          "type": "address"
        }
      ],
      "name": "PoolCreated",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        },
        {
          "internalType": "uint24",
          "name": "fee",
          "type": "uint24"
        }
      ],
      "name": "createPool",
      "outputs": [
        {
          "internalType": "address",
          "name": "pool",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint24",
          "name": "fee",
          "type": "uint24"
        },
        {
          "internalType": "int24",
          "name": "tickSpacing",
          "type": "int24"
        }
      ],
      "name": "enableFeeAmount",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "name": "feeAmountTickSpacing",
      "outputs": [
        {
          "internalType": "int24",
          "name": "",
          "type": "int24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "name": "getPool",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "parameters",
      "outputs": [
        {
          "internalType": "address",
          "name": "factory",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token0",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token1",
          "type": "address"
        },
        {
          "internalType": "uint24",
          "name": "fee",
          "type": "uint24"
        },
        {
          "internalType": "int24",
          "name": "tickSpacing",
          "type": "int24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "referenceFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "setOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a060405234801561001057600080fd5b503060601b608052600380546001600160a01b031916339081179091556040516000907fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c908290a36101f4600081815260046020527ffb8cf1d12598d1a039dd1d106665851a96aadf67d0d9ed76fceea282119208b7805462ffffff1916600a90811790915560405190929160008051602061637783398151915291a3610bb8600081815260046020527f72dffa9b822156d9cf4b0090fa0b656bcb9cc2b2c60eb6acfc20a34f54b31743805462ffffff1916603c90811790915560405190929160008051602061637783398151915291a3612710600081815260046020527f8cc740d51daa94ff54f33bd779c2d20149f524c340519b49181be5a08615f829805462ffffff191660c890811790915560405190929160008051602061637783398151915291a360805160601c6162036101746000398061057c52506162036000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063890357301161005b57806389035730146101605780638a7c195f146101aa5780638da5cb5b146101d5578063a1671295146101dd57610088565b806313af40351461008d5780631698ee82146100b557806322afcccb1461010d5780636333ff4e14610146575b600080fd5b6100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610219565b005b6100f1600480360360608110156100cb57600080fd5b5080356001600160a01b03908116916020810135909116906040013562ffffff1661028c565b604080516001600160a01b039092168252519081900360200190f35b61012f6004803603602081101561012357600080fd5b503562ffffff166102b8565b6040805160029290920b8252519081900360200190f35b61014e6102cd565b60408051918252519081900360200190f35b6101686102d3565b604080516001600160a01b0396871681529486166020860152929094168383015262ffffff16606083015260029290920b608082015290519081900360a00190f35b6100b3600480360360408110156101c057600080fd5b5062ffffff813516906020013560020b610309565b6100f16103cc565b6100f1600480360360608110156101f357600080fd5b5080356001600160a01b03908116916020810135909116906040013562ffffff166103db565b6003546001600160a01b0316331461023057600080fd5b6003546040516001600160a01b038084169216907fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c90600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b60056020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b60046020526000908152604090205460020b81565b61271081565b600054600154600280546001600160a01b03938416939283169281169162ffffff600160a01b83041691600160b81b9004900b85565b6003546001600160a01b0316331461032057600080fd5b620f42408262ffffff161061033457600080fd5b60008160020b13801561034b57506140008160020b125b61035457600080fd5b62ffffff8216600090815260046020526040902054600290810b900b1561037a57600080fd5b62ffffff828116600081815260046020526040808220805462ffffff1916600287900b958616179055517fc66a3fdf07232cdd185febcc6579d408c241b47ae2f9907d84be655141eeaecc9190a35050565b6003546001600160a01b031681565b60006103e5610571565b826001600160a01b0316846001600160a01b0316141561040457600080fd5b600080846001600160a01b0316866001600160a01b03161061042757848661042a565b85855b90925090506001600160a01b03821661044257600080fd5b62ffffff8416600090815260046020526040902054600290810b9081900b61046957600080fd5b6001600160a01b0383811660009081526005602090815260408083208685168452825280832062ffffff8a16845290915290205416156104a857600080fd5b6104b530848488856105a8565b6001600160a01b03808516600081815260056020818152604080842089871680865290835281852062ffffff8e168087529084528286208054988a166001600160a01b0319998a1681179091558287529484528286208787528452828620818752845294829020805490971684179096558051600289900b815291820192909252815195995091947f783cca1c0412dd0d695e784568c96da2e9c22ff989357a2e8b1d9b2b4e6b71189281900390910190a45050509392505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105a657600080fd5b565b6040805160a0810182526001600160a01b03878116808352878216602080850182905292881684860181905262ffffff888116606080880182905260028a810b6080998a01819052600080546001600160a01b03199081169099178155600180548a1689179055825490981686177fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff16600160a01b8502177fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff16600160b81b91830b90951602939093179092558751808701949094528388019290925282810191909152855180830390910181529301938490528251929091019190912090916106b190610720565b8190604051809103906000f59050801580156106d1573d6000803e3d6000fd5b50600080546001600160a01b0319908116909155600180549091169055600280547fffffffffffff00000000000000000000000000000000000000000000000000001690559695505050505050565b615ac98061072e8339019056fe6101606040523480156200001257600080fd5b503060601b60805260408051630890357360e41b81529051600091339163890357309160048082019260a092909190829003018186803b1580156200005657600080fd5b505afa1580156200006b573d6000803e3d6000fd5b505050506040513d60a08110156200008257600080fd5b508051602080830151604084015160608086015160809096015160e896871b6001600160e81b0319166101005291811b6001600160601b031990811660e05292811b831660c0529390931b1660a052600282810b900b90921b610120529150620000f79082906200010f811b62002d6517901c565b60801b6001600160801b03191661014052506200017d565b60008082600281900b620d89e719816200012557fe5b05029050600083600281900b620d89e8816200013d57fe5b0502905060008460020b83830360020b816200015557fe5b0560010190508062ffffff166001600160801b038016816200017357fe5b0495945050505050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160e81c6101205160e81c6101405160801c61587062000259600039806121c4528061473952806147705250806111275280612adf52806147a452806147d65250806112185280611b975280611bce5280612b275250806117a452806118d35280611c5152806120c4528061261c5280612b0352806132865250806108ee528061176c528061190b5280611c20528061205e5280612596528061314d525080610fdb528061225152806124555280612abb525080612ddc52506158706000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c80636e88a7bd116100f9578063c45a015511610097578063ddca3f4311610071578063ddca3f431461081c578063f30583991461083c578063f30dba9314610844578063f637731d146108c6576101b9565b8063c45a0155146107ed578063d0c93a7c146107f5578063d21220a714610814576101b9565b806385b66729116100d357806385b6672914610612578063883bdbfd1461064f578063a34123a714610758578063a38807f214610792576101b9565b80636e88a7bd146105da57806370cf754a146105e25780638206a4d1146105ea576101b9565b80633c8a7d8d11610166578063490e6cbc11610140578063490e6cbc146104845780634f1eb3d814610510578063514ea4bf146105615780635339c296146105ba576101b9565b80633c8a7d8d1461031057806346141319146103cb57806346964149146103e5576101b9565b8063252c09d711610197578063252c09d71461023d57806332148f67146102945780633850c7bd146102b7576101b9565b80630dfe1681146101be5780631a686502146101e25780631ad8b03b14610206575b600080fd5b6101c66108ec565b604080516001600160a01b039092168252519081900360200190f35b6101ea610910565b604080516001600160801b039092168252519081900360200190f35b61020e61091f565b60405180836001600160801b03168152602001826001600160801b031681526020019250505060405180910390f35b61025a6004803603602081101561025357600080fd5b5035610939565b6040805163ffffffff909516855260069390930b60208501526001600160a01b039091168383015215156060830152519081900360800190f35b6102b5600480360360208110156102aa57600080fd5b503561ffff1661097f565b005b6102bf610a79565b604080516001600160a01b03909816885260029690960b602088015261ffff9485168787015292841660608701529216608085015260ff90911660a0840152151560c0830152519081900360e00190f35b6103b2600480360360a081101561032657600080fd5b6001600160a01b03823516916020810135600290810b92604083013590910b916001600160801b036060820135169181019060a08101608082013564010000000081111561037357600080fd5b82018360208201111561038557600080fd5b803590602001918460018302840111640100000000831117156103a757600080fd5b509092509050610ac9565b6040805192835260208301919091528051918290030190f35b6103d3610d87565b60408051918252519081900360200190f35b6103b2600480360360c08110156103fb57600080fd5b6001600160a01b0382358116926020810135151592604082013592606083013516919081019060a08101608082013564010000000081111561043c57600080fd5b82018360208201111561044e57600080fd5b8035906020019184600183028401116401000000008311171561047057600080fd5b9193509150356001600160a01b0316610d8d565b6102b56004803603608081101561049a57600080fd5b6001600160a01b0382351691602081013591604082013591908101906080810160608201356401000000008111156104d157600080fd5b8201836020820111156104e357600080fd5b8035906020019184600183028401116401000000008311171561050557600080fd5b509092509050611af4565b61020e600480360360a081101561052657600080fd5b506001600160a01b03813516906020810135600290810b91604081013590910b906001600160801b0360608201358116916080013516611f4f565b61057e6004803603602081101561057757600080fd5b503561216d565b604080516001600160801b0396871681526020810195909552848101939093529084166060840152909216608082015290519081900360a00190f35b6103d3600480360360208110156105d057600080fd5b503560010b6121aa565b6103d36121bc565b6101ea6121c2565b6102b56004803603604081101561060057600080fd5b5060ff813581169160200135166121e6565b61020e6004803603606081101561062857600080fd5b506001600160a01b03813516906001600160801b03602082013581169160400135166123e5565b6106bf6004803603602081101561066557600080fd5b81019060208101813564010000000081111561068057600080fd5b82018360208201111561069257600080fd5b803590602001918460208302840111640100000000831117156106b457600080fd5b5090925090506126b4565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156107035781810151838201526020016106eb565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561074257818101518382015260200161072a565b5050505090500194505050505060405180910390f35b6103b26004803603606081101561076e57600080fd5b508035600290810b91602081013590910b90604001356001600160801b0316612744565b6107bc600480360360408110156107a857600080fd5b508035600290810b9160200135900b6128c0565b6040805160069490940b84526001600160a01b03909216602084015263ffffffff1682820152519081900360600190f35b6101c6612ab9565b6107fd612add565b6040805160029290920b8252519081900360200190f35b6101c6612b01565b610824612b25565b6040805162ffffff9092168252519081900360200190f35b6103d3612b49565b6108646004803603602081101561085a57600080fd5b503560020b612b4f565b604080516001600160801b039099168952600f9790970b602089015287870195909552606087019390935260069190910b60808601526001600160a01b031660a085015263ffffffff1660c0840152151560e083015251908190036101000190f35b6102b5600480360360208110156108dc57600080fd5b50356001600160a01b0316612bbf565b7f000000000000000000000000000000000000000000000000000000000000000081565b6005546001600160801b031681565b6004546001600160801b0380821691600160801b90041682565b60098161ffff811061094a57600080fd5b015463ffffffff81169150640100000000810460060b90600160581b81046001600160a01b031690600160f81b900460ff1684565b600154600160f01b900460ff166109c3576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6001805460ff60f01b191690556109d8612dd1565b600154600160d81b900461ffff1660006109f460098385612e08565b6001805461ffff808416600160d81b810261ffff60d81b1990931692909217909255919250831614610a61576040805161ffff80851682528316602082015281517fac49e518f90a358f652e4400164f05a5d8f7e35e7747279bc3a93dbf584e125a929181900390910190a15b50506001805460ff60f01b1916600160f01b17905550565b6001546001600160a01b03811690600160a01b810460020b9061ffff600160b81b8204811691600160c81b8104821691600160d81b8204169060ff600160e81b8204811691600160f01b90041687565b6001546000908190600160f01b900460ff16610b12576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6001805460ff60f01b191690556001600160801b038516610b3257600080fd5b600080610b8060405180608001604052808c6001600160a01b031681526020018b60020b81526020018a60020b8152602001610b768a6001600160801b0316612eae565b600f0b9052612ebf565b92509250508193508092506000806000861115610ba257610b9f6130ff565b91505b8415610bb357610bb0613238565b90505b336001600160a01b031663b6adba4287878b8b6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015610c3557600080fd5b505af1158015610c49573d6000803e3d6000fd5b505050506000861115610ca057610c5e6130ff565b610c6883886132d0565b1115610ca0576040805162461bcd60e51b815260206004820152600260248201526104d360f41b604482015290519081900360640190fd5b8415610cf057610cae613238565b610cb882876132d0565b1115610cf0576040805162461bcd60e51b81526020600482015260026024820152614d3160f01b604482015290519081900360640190fd5b8960020b8b60020b8d6001600160a01b03167f7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde338d8b8b60405180856001600160a01b03168152602001846001600160801b0316815260200183815260200182815260200194505050505060405180910390a450506001805460ff60f01b1916600160f01b17905550919890975095505050505050565b60035481565b600080610d98612dd1565b86610dcf576040805162461bcd60e51b8152602060048201526002602482015261415360f01b604482015290519081900360640190fd5b6040805160e0810182526001546001600160a01b0381168252600160a01b8104600290810b810b900b602083015261ffff600160b81b8204811693830193909352600160c81b810483166060830152600160d81b8104909216608082015260ff600160e81b8304811660a0830152600160f01b909204909116151560c08201819052610e88576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b88610ed35780600001516001600160a01b0316876001600160a01b0316118015610ece575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038816105b610f05565b80600001516001600160a01b0316876001600160a01b0316108015610f0557506401000276a36001600160a01b038816115b610f3c576040805162461bcd60e51b815260206004820152600360248201526214d41360ea1b604482015290519081900360640190fd5b6001805460ff60f01b191690556040805161010081019091528915158152600090602081018b610f775760048460a0015160ff16901c610f8a565b60108460a0015160ff1681610f8857fe5b065b60ff1681526005546001600160801b03166020820152604001610fab6132e6565b63ffffffff168152602001600060060b815260200160006001600160a01b031681526020016000151581526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636333ff4e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561103257600080fd5b505afa158015611046573d6000803e3d6000fd5b505050506040513d602081101561105c57600080fd5b5051905260408051610100810182528b81526000602082810182905286516001600160a01b0316938301939093529185015160020b606082015291925090608081018c6110ab576003546110af565b6002545b81526000602082018190526005546001600160801b0316604083015260609091015290505b8051158015906110fa5750886001600160a01b031681604001516001600160a01b031614155b1561153f57611107615800565b60408201516001600160a01b031681526060820151835161114c916007917f0000000000000000000000000000000000000000000000000000000000000000906132ea565b15156040830152600290810b810b60208301819052620d89e719910b121561117d57620d89e719602082015261119c565b6020810151620d89e860029190910b131561119c57620d89e860208201525b6111a9816020015161342c565b6001600160a01b031660608201526040820151835161123c91906111e5578b6001600160a01b031683606001516001600160a01b0316116111ff565b8b6001600160a01b031683606001516001600160a01b0316105b61120d57826060015161120f565b8b5b60c085015185517f000000000000000000000000000000000000000000000000000000000000000061375e565b60c0850190815260a085019190915260808401919091526001600160a01b0390911660408401525160e084015160009161127d91620f424090810390613950565b90506000611298828460c001516139ff90919063ffffffff16565b60e0850180518201905260c08401839052905060008d13156112f3576112c78360c00151846080015101613a0f565b845103845260a08301516112e9906112de90613a0f565b602086015190613a25565b602085015261132e565b6113008360a00151613a0f565b845101845260c083015160808401516113289161131d9101613a0f565b602086015190613a3b565b60208501525b602085015160ff1615611377576000856020015160ff168460c001518161135157fe5b60c0860180519290910491829003905260a0860180519091016001600160801b03169052505b60c08401516001600160801b0316156113b6576113aa8360c00151600160801b8660c001516001600160801b0316613950565b60808501805190910190525b82606001516001600160a01b031684604001516001600160a01b031614156114fc578260400151156114d2578460c001516114405761141e856060015160008860200151896040015189604001518b606001516009613a51909695949392919063ffffffff16565b6001600160a01b031660a0870152600690810b900b6080860152600160c08601525b845160009061145157600254611457565b84608001515b90506000866000015161146e578560800151611472565b6003545b905060006114a4866020015184848b60a001518c608001518d606001516006613be4909695949392919063ffffffff16565b8851909150156114b2576000035b6114c08760c0015182613cb7565b6001600160801b031660c08801525050505b84516114e25782602001516114eb565b60018360200151035b600290810b900b6060850152611537565b82600001516001600160a01b031684604001516001600160a01b0316146115375761152a8460400151613d6d565b600290810b900b60608501525b5050506110d4565b826020015160020b816060015160020b1461161a5760008061158d856040015185606001518760200151876040015189606001518a608001516009614099909695949392919063ffffffff16565b604085015160608601516001805461ffff60c81b1916600160c81b61ffff958616021761ffff60b81b1916600160b81b95909416949094029290921762ffffff60a01b1916600160a01b62ffffff60029490940b93909316929092029190911773ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161790555061164c9050565b60408101516001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911790555b8060c001516001600160801b031682604001516001600160801b0316146116925760c0810151600580546001600160801b0319166001600160801b039092169190911790555b8151156116e357608081015160025560a08101516001600160801b0316156116de5760a0810151600480546001600160801b031981166001600160801b03918216909301169190911790555b611729565b608081015160035560a08101516001600160801b0316156117295760a0810151600480546001600160801b03808216600160801b92839004821690940116029190911790555b8151151560008b131461174457602081015181518b03611751565b80600001518a0381602001515b83519196509450156118c45760e081015115611796576117967f0000000000000000000000000000000000000000000000000000000000000000878360e0015161424e565b60008412156117cd576117cd7f00000000000000000000000000000000000000000000000000000000000000008d8660000361424e565b60006117d76130ff565b9050336001600160a01b031663101e860587878c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561185b57600080fd5b505af115801561186f573d6000803e3d6000fd5b5050505061187b6130ff565b61188582886132d0565b11156118be576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b50611a27565b60e0810151156118fd576118fd7f0000000000000000000000000000000000000000000000000000000000000000878360e0015161424e565b6000851215611934576119347f00000000000000000000000000000000000000000000000000000000000000008d8760000361424e565b600061193e613238565b9050336001600160a01b031663101e860587878c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b1580156119c257600080fd5b505af11580156119d6573d6000803e3d6000fd5b505050506119e2613238565b6119ec82876132d0565b1115611a25576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b505b8b6001600160a01b0316336001600160a01b03167fbb875702d7648509d1df9b29b9a960b30ff7571d278414eaa2d3ca2596ef5079878785604001518660c0015187606001518d8960e0015160405180888152602001878152602001866001600160a01b03168152602001856001600160801b031681526020018460020b8152602001836001600160a01b0316815260200182815260200197505050505050505060405180910390a350506001805460ff60f01b1916600160f01b17905550909890975095505050505050565b600154600160f01b900460ff16611b38576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6001805460ff60f01b19169055611b4d612dd1565b6005546001600160801b031680611b8f576040805162461bcd60e51b81526020600482015260016024820152601360fa1b604482015290519081900360640190fd5b6000611bc4867f000000000000000000000000000000000000000000000000000000000000000062ffffff16620f424061439c565b90506000611bfb867f000000000000000000000000000000000000000000000000000000000000000062ffffff16620f424061439c565b90506000611c076130ff565b90506000611c13613238565b90508815611c4657611c467f00000000000000000000000000000000000000000000000000000000000000008b8b61424e565b8715611c7757611c777f00000000000000000000000000000000000000000000000000000000000000008b8a61424e565b336001600160a01b031663506621b685858a8a6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015611cf957600080fd5b505af1158015611d0d573d6000803e3d6000fd5b505050506000611d1b6130ff565b90506000611d27613238565b905081611d3485886132d0565b1115611d6c576040805162461bcd60e51b8152602060048201526002602482015261046360f41b604482015290519081900360640190fd5b80611d7784876132d0565b1115611daf576040805162461bcd60e51b8152602060048201526002602482015261463160f01b604482015290519081900360640190fd5b8382038382038115611e3e57600154600160e81b9004600f1660008115611de2578160ff168481611ddc57fe5b04611de5565b60005b90506001600160801b03811615611e1857600480546001600160801b038082168401166001600160801b03199091161790555b611e32818503600160801b8d6001600160801b0316613950565b60028054909101905550505b8015611ec957600154600160e81b900460041c600f1660008115611e6e578160ff168381611e6857fe5b04611e71565b60005b90506001600160801b03811615611ea357600480546001600160801b03600160801b8083048216850182160291161790555b611ebd818403600160801b8d6001600160801b0316613950565b60038054909101905550505b8d6001600160a01b0316336001600160a01b03167fbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca6338f8f86866040518085815260200184815260200183815260200182815260200194505050505060405180910390a350506001805460ff60f01b1916600160f01b179055505050505050505050505050565b6001546000908190600160f01b900460ff16611f98576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6001805460ff60f01b191690556000611fb460083389896143d6565b60038101549091506001600160801b0390811690861611611fd55784611fe4565b60038101546001600160801b03165b60038201549093506001600160801b03600160801b90910481169085161161200c5783612022565b6003810154600160801b90046001600160801b03165b91506001600160801b03831615612087576003810180546001600160801b031981166001600160801b03918216869003821617909155612087907f0000000000000000000000000000000000000000000000000000000000000000908a90861661424e565b6001600160801b038216156120ed576003810180546001600160801b03600160801b8083048216869003821602918116919091179091556120ed907f0000000000000000000000000000000000000000000000000000000000000000908a90851661424e565b604080516001600160a01b038a1681526001600160801b0380861660208301528416818301529051600288810b92908a900b9133917f70935338e69775456a85ddef226c395fb668b63fa0115f5f20610b388e6ca9c0919081900360600190a4506001805460ff60f01b1916600160f01b17905590969095509350505050565b60086020526000908152604090208054600182015460028301546003909301546001600160801b0392831693919281811691600160801b90041685565b60076020526000908152604090205481565b60005481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600154600160f01b900460ff1661222a576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6001805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691638da5cb5b916004808301926020929190829003018186803b15801561229757600080fd5b505afa1580156122ab573d6000803e3d6000fd5b505050506040513d60208110156122c157600080fd5b50516001600160a01b031633146122d757600080fd5b60ff821615806122fa575060048260ff16101580156122fa5750600a8260ff1611155b8015612324575060ff81161580612324575060048160ff16101580156123245750600a8160ff1611155b61232d57600080fd5b60018054610ff0600484901b16840160ff908116600160e81b9081027fffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841617909355919004167f973d8d92bb299f4af6ce49b52a8adb85ae46b9f214c4c4fc06ac77401237b1336010826040805160ff9390920683168252600f600486901c16602083015286831682820152918516606082015290519081900360800190a150506001805460ff60f01b1916600160f01b17905550565b6001546000908190600160f01b900460ff1661242e576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6001805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691638da5cb5b916004808301926020929190829003018186803b15801561249b57600080fd5b505afa1580156124af573d6000803e3d6000fd5b505050506040513d60208110156124c557600080fd5b50516001600160a01b031633146124db57600080fd5b6004546001600160801b03908116908516116124f75783612504565b6004546001600160801b03165b6004549092506001600160801b03600160801b90910481169084161161252a578261253e565b600454600160801b90046001600160801b03165b90506001600160801b038216156125bf576004546001600160801b038381169116141561256d57600019909101905b600480546001600160801b031981166001600160801b039182168590038216179091556125bf907f0000000000000000000000000000000000000000000000000000000000000000908790851661424e565b6001600160801b03811615612645576004546001600160801b03828116600160801b9092041614156125f057600019015b600480546001600160801b03600160801b808304821685900382160291811691909117909155612645907f0000000000000000000000000000000000000000000000000000000000000000908790841661424e565b604080516001600160801b0380851682528316602082015281516001600160a01b0388169233927f596b573906218d3411850b26a6b437d6c4522fdb43d2d2386263f86d50b8b151929081900390910190a36001805460ff60f01b1916600160f01b1790559094909350915050565b6060806126bf612dd1565b6127396126ca6132e6565b85858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600154600554600995949350600160a01b820460020b925061ffff600160b81b83048116926001600160801b0390921691600160c81b90041661443a565b915091509250929050565b6001546000908190600160f01b900460ff1661278d576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6001805460ff60f01b1916905560408051608081018252338152600287810b602083015286900b91810191909152600090819081906127e990606081016127dc6001600160801b038a16612eae565b600003600f0b9052612ebf565b925092509250816000039450806000039350600085118061280a5750600084115b15612849576003830180546001600160801b038082168089018216600160801b93849004831689019092169092029091176001600160801b0319161790555b604080516001600160801b0388168152602081018790528082018690529051600289810b92908b900b9133917f0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c919081900360600190a450506001805460ff60f01b1916600160f01b179055509094909350915050565b60008060006128cd612dd1565b6128d78585614594565b600285810b810b600090815260066020819052604080832088850b90940b8352822060038401549182900b9367010000000000000083046001600160a01b0316928492600160d81b820463ffffffff16928492909190600160f81b900460ff168061294157600080fd5b6003820154600681900b985067010000000000000081046001600160a01b03169650600160d81b810463ffffffff169450600160f81b900460ff168061298657600080fd5b50506040805160e0810182526001546001600160a01b0381168252600160a01b8104600290810b810b810b6020840181905261ffff600160b81b8404811695850195909552600160c81b830485166060850152600160d81b8304909416608084015260ff600160e81b8304811660a0850152600160f01b909204909116151560c08301529093508e810b91900b12159050612a2f57509390940396509003935090039050612ab2565b8a60020b816020015160020b1215612aa3576000612a4b6132e6565b6020830151604084015160055460608601519394506000938493612a81936009938893879392916001600160801b031690613a51565b9a9003989098039b505094909603929092039650909103039250612ab2915050565b50949093039650039350900390505b9250925092565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025481565b60066020819052600091825260409091208054600182015460028301546003909301546001600160801b03831694600160801b909304600f0b93919281900b9067010000000000000081046001600160a01b031690600160d81b810463ffffffff1690600160f81b900460ff1688565b6001546001600160a01b031615612c02576040805162461bcd60e51b8152602060048201526002602482015261414960f01b604482015290519081900360640190fd5b6000612c0d82613d6d565b9050600080612c25612c1d6132e6565b60099061465d565b6040805160e0810182526001600160a01b038816808252600288810b6020808501829052600085870181905261ffff898116606088018190529089166080880181905260a0880192909252600160c09097018790528654600160f01b73ffffffffffffffffffffffffffffffffffffffff19909116871762ffffff60a01b1916600160a01b62ffffff9787900b9790971696909602959095177fffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffff16600160c81b9091021761ffff60d81b1916600160d81b909102177fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1692909217909355835191825281019190915281519395509193507f98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c9592918290030190a150505050565b60008082600281900b620d89e71981612d7a57fe5b05029050600083600281900b620d89e881612d9157fe5b0502905060008460020b83830360020b81612da857fe5b0560010190508062ffffff166001600160801b03801681612dc557fe5b0493505050505b919050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612e0657600080fd5b565b6000808361ffff1611612e46576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b8261ffff168261ffff1611612e5c575081612ea7565b825b8261ffff168161ffff161015612ea2576001858261ffff1661ffff8110612e8157fe5b01805463ffffffff191663ffffffff92909216919091179055600101612e5e565b508190505b9392505050565b80600f81900b8114612dcc57600080fd5b6000806000612ecc612dd1565b612ede84602001518560400151614594565b6040805160e0810182526001546001600160a01b0381168252600160a01b8104600290810b810b900b602080840182905261ffff600160b81b8404811685870152600160c81b84048116606080870191909152600160d81b8504909116608086015260ff600160e81b8504811660a0870152600160f01b909404909316151560c085015288519089015194890151928901519394612f8294919390929091906146a9565b93508460600151600f0b6000146130f757846020015160020b816020015160020b1215612fd757612fd0612fb9866020015161342c565b612fc6876040015161342c565b876060015161485e565b92506130f7565b846040015160020b816020015160020b12156130cd5760055460408201516001600160801b03909116906130299061300d6132e6565b6020850151606086015160808701516009949392918791614099565b6001805461ffff60c81b1916600160c81b61ffff938416021761ffff60b81b1916600160b81b939092169290920217905581516040870151613079919061306f9061342c565b886060015161485e565b935061309761308b876020015161342c565b835160608901516148a3565b92506130a7818760600151613cb7565b600580546001600160801b0319166001600160801b0392909216919091179055506130f7565b6130f46130dd866020015161342c565b6130ea876040015161342c565b87606001516148a3565b91505b509193909250565b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693919290918291908083835b602083106131985780518252601f199092019160209182019101613179565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146131f8576040519150601f19603f3d011682016040523d82523d6000602084013e6131fd565b606091505b509150915081801561321157506020815110155b61321a57600080fd5b80806020019051602081101561322f57600080fd5b50519250505090565b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169391929091829190808383602083106131985780518252601f199092019160209182019101613179565b808201828110156132e057600080fd5b92915050565b4290565b60008060008460020b8660020b816132fe57fe5b05905060008660020b12801561332557508460020b8660020b8161331e57fe5b0760020b15155b1561332f57600019015b83156133a457600080613341836148d2565b600182810b810b600090815260208d9052604090205460ff83169190911b8001600019019081168015159750929450909250908561338657888360ff16860302613399565b88613390826148e4565b840360ff168603025b965050505050613422565b6000806133b3836001016148d2565b91509150600060018260ff166001901b031990506000818b60008660010b60010b815260200190815260200160002054169050806000141595508561340557888360ff0360ff1686600101010261341b565b888361341083614984565b0360ff168660010101025b9650505050505b5094509492505050565b60008060008360020b12613443578260020b61344b565b8260020b6000035b9050620d89e8811115613489576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b60006001821661349d57600160801b6134af565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff16905060028216156134e3576ffff97272373d413259a46990580e213a0260801c5b6004821615613502576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615613521576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615613540576fffcb9843d60f6159c9db58835c9266440260801c5b602082161561355f576fff973b41fa98c081472e6896dfb254c00260801c5b604082161561357e576fff2ea16466c96a3843ec78b326b528610260801c5b608082161561359d576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156135bd576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b6102008216156135dd576ff987a7253ac413176f2b074cf7815e540260801c5b6104008216156135fd576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161561361d576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161561363d576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161561365d576fa9f746462d870fdf8a65dc1f90e061e50260801c5b61400082161561367d576f70d869a156d2a1b890bb3df62baf32f70260801c5b61800082161561369d576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156136be576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156136de576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156136fd576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161561371a576b048a170391f7dc42444e8fa20260801c5b60008460020b131561373557806000198161373157fe5b0490505b64010000000081061561374957600161374c565b60005b60ff16602082901c0192505050919050565b60008080806001600160a01b03808916908a1610158187128015906137e35760006137978989620f42400362ffffff16620f4240613950565b9050826137b0576137ab8c8c8c6001614a6e565b6137bd565b6137bd8b8d8c6001614ae7565b95508581106137ce578a96506137dd565b6137da8c8b8386614ba4565b96505b5061382d565b816137fa576137f58b8b8b6000614ae7565b613807565b6138078a8c8b6000614a6e565b935083886000031061381b5789955061382d565b61382a8b8a8a60000385614bf0565b95505b6001600160a01b038a81169087161482156138905780801561384c5750815b6138625761385d878d8c6001614ae7565b613864565b855b9550808015613871575081155b61388757613882878d8c6000614a6e565b613889565b845b94506138da565b80801561389a5750815b6138b0576138ab8c888c6001614a6e565b6138b2565b855b95508080156138bf575081155b6138d5576138d08c888c6000614ae7565b6138d7565b845b94505b811580156138ea57508860000385115b156138f6578860000394505b81801561391557508a6001600160a01b0316876001600160a01b031614155b15613924578589039350613941565b61393e868962ffffff168a620f42400362ffffff1661439c565b93505b50505095509550955095915050565b6000808060001985870986860292508281109083900303905080613986576000841161397b57600080fd5b508290049050612ea7565b80841161399257600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b808203828111156132e057600080fd5b6000600160ff1b8210613a2157600080fd5b5090565b808203828113156000831215146132e057600080fd5b818101828112156000831215146132e057600080fd5b60008063ffffffff8716613af8576000898661ffff1661ffff8110613a7257fe5b60408051608081018252919092015463ffffffff8082168084526401000000008304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff16151560608301529092508a1614613ae457613ae1818a8988614c3c565b90505b806020015181604001519250925050613bd8565b868803600080613b0d8c8c858c8c8c8c614cec565b91509150816000015163ffffffff168363ffffffff161415613b3f578160200151826040015194509450505050613bd8565b805163ffffffff84811691161415613b67578060200151816040015194509450505050613bd8565b8151815160208085015190840151918390039286039163ffffffff80841692908516910360060b81613b9557fe5b05028460200151018263ffffffff168263ffffffff1686604001518660400151036001600160a01b03160281613bc757fe5b048560400151019650965050505050505b97509795505050505050565b600295860b860b60009081526020979097526040909620600181018054909503909455938301805490920390915560038201805463ffffffff600160d81b6001600160a01b036701000000000000008085048216909603169094027fffffffffff0000000000000000000000000000000000000000ffffffffffffff90921691909117600681810b90960390950b66ffffffffffffff1666ffffffffffffff199095169490941782810485169095039093160263ffffffff60d81b1990931692909217905554600160801b9004600f0b90565b60008082600f0b1215613d1c57826001600160801b03168260000384039150816001600160801b031610613d17576040805162461bcd60e51b81526020600482015260026024820152614c5360f01b604482015290519081900360640190fd5b6132e0565b826001600160801b03168284019150816001600160801b031610156132e0576040805162461bcd60e51b81526020600482015260026024820152614c4160f01b604482015290519081900360640190fd5b60006401000276a36001600160a01b03831610801590613da9575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b613dde576040805162461bcd60e51b81526020600482015260016024820152602960f91b604482015290519081900360640190fd5b77ffffffffffffffffffffffffffffffffffffffff00000000602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c97908811961790941790921717909117171760808110613e7f57607f810383901c9150613e89565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b1461408a57886001600160a01b031661406e8261342c565b6001600160a01b031611156140835781614085565b805b61408c565b815b9998505050505050505050565b6000806000898961ffff1661ffff81106140af57fe5b60408051608081018252919092015463ffffffff8082168084526401000000008304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff16151560608301529092508916141561411f5788859250925050613bd8565b8461ffff168461ffff1611801561414057506001850361ffff168961ffff16145b1561414d57839150614151565b8491505b8161ffff168960010161ffff168161416557fe5b06925061417481898989614c3c565b8a8461ffff1661ffff811061418557fe5b825191018054602084015160408501516060909501511515600160f81b027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001600160a01b03909616600160581b027fff0000000000000000000000000000000000000000ffffffffffffffffffffff60069390930b66ffffffffffffff16640100000000026affffffffffffff000000001963ffffffff90971663ffffffff199095169490941795909516929092171692909217929092161790555097509795505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b602083106142ca5780518252601f1990920191602091820191016142ab565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461432c576040519150601f19603f3d011682016040523d82523d6000602084013e614331565b606091505b509150915081801561435f57508051158061435f575080806020019051602081101561435c57600080fd5b50515b614395576040805162461bcd60e51b81526020600482015260026024820152612a2360f11b604482015290519081900360640190fd5b5050505050565b60006143a9848484613950565b9050600082806143b557fe5b8486091115612ea75760001981106143cc57600080fd5b6001019392505050565b6040805160609490941b6bffffffffffffffffffffffff1916602080860191909152600293840b60e890811b60348701529290930b90911b60378401528051808403601a018152603a90930181528251928201929092206000908152929052902090565b60608060008361ffff161161447a576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b865167ffffffffffffffff8111801561449257600080fd5b506040519080825280602002602001820160405280156144bc578160200160208202803683370190505b509150865167ffffffffffffffff811180156144d757600080fd5b50604051908082528060200260200182016040528015614501578160200160208202803683370190505b50905060005b8751811015614587576145328a8a8a848151811061452157fe5b60200260200101518a8a8a8a613a51565b84838151811061453e57fe5b6020026020010184848151811061455157fe5b60200260200101826001600160a01b03166001600160a01b03168152508260060b60060b81525050508080600101915050614507565b5097509795505050505050565b8060020b8260020b126145d4576040805162461bcd60e51b8152602060048201526003602482015262544c5560e81b604482015290519081900360640190fd5b620d89e719600283900b1215614617576040805162461bcd60e51b8152602060048201526003602482015262544c4d60e81b604482015290519081900360640190fd5b620d89e8600282900b1315614659576040805162461bcd60e51b815260206004820152600360248201526254554d60e81b604482015290519081900360640190fd5b5050565b6040805160808101825263ffffffff9283168082526000602083018190529282019290925260016060909101819052835463ffffffff1916909117909116600160f81b17909155908190565b60006146b860088787876143d6565b60025460035491925090600080600f87900b156147fe5760006146d96132e6565b60015460055491925060009182916147239160099186918591600160a01b810460020b9161ffff600160b81b83048116926001600160801b0390921691600160c81b900416613a51565b909250905061475d60068d8b8d8b8b87898b60007f0000000000000000000000000000000000000000000000000000000000000000614ee9565b945061479460068c8b8d8b8b87898b60017f0000000000000000000000000000000000000000000000000000000000000000614ee9565b935084156147c8576147c860078d7f00000000000000000000000000000000000000000000000000000000000000006150d3565b83156147fa576147fa60078c7f00000000000000000000000000000000000000000000000000000000000000006150d3565b5050505b60008061481060068c8c8b8a8a615139565b9092509050614821878a84846151e5565b600089600f0b121561484f57831561483e5761483e60068c61537a565b821561484f5761484f60068b61537a565b50505050505095945050505050565b60008082600f0b126148845761487f61487a8585856001614ae7565b613a0f565b61489b565b61489761487a8585856000036000614ae7565b6000035b949350505050565b60008082600f0b126148bf5761487f61487a8585856001614a6e565b61489761487a8585856000036000614a6e565b60020b600881901d9161010090910790565b60008082116148f257600080fd5b600160801b821061490557608091821c91015b68010000000000000000821061491d57604091821c91015b640100000000821061493157602091821c91015b62010000821061494357601091821c91015b610100821061495457600891821c91015b6010821061496457600491821c91015b6004821061497457600291821c91015b60028210612dcc57600101919050565b600080821161499257600080fd5b5060ff6001600160801b038216156149ad57607f19016149b5565b608082901c91505b67ffffffffffffffff8216156149ce57603f19016149d6565b604082901c91505b63ffffffff8216156149eb57601f19016149f3565b602082901c91505b61ffff821615614a0657600f1901614a0e565b601082901c91505b60ff821615614a205760071901614a28565b600882901c91505b600f821615614a3a5760031901614a42565b600482901c91505b6003821615614a545760011901614a5c565b600282901c91505b6001821615612dcc5760001901919050565b6000836001600160a01b0316856001600160a01b03161115614a8e579293925b81614abb57614ab6836001600160801b03168686036001600160a01b0316600160601b613950565b614ade565b614ade836001600160801b03168686036001600160a01b0316600160601b61439c565b95945050505050565b6000836001600160a01b0316856001600160a01b03161115614b07579293925b7bffffffffffffffffffffffffffffffff000000000000000000000000606084901b166001600160a01b038686038116908716614b4357600080fd5b83614b7357866001600160a01b0316614b668383896001600160a01b0316613950565b81614b6d57fe5b04614b99565b614b99614b8a8383896001600160a01b031661439c565b886001600160a01b03166153a6565b979650505050505050565b600080856001600160a01b031611614bbb57600080fd5b6000846001600160801b031611614bd157600080fd5b81614be357614ab685858560016153b1565b614ade8585856001615492565b600080856001600160a01b031611614c0757600080fd5b6000846001600160801b031611614c1d57600080fd5b81614c2f57614ab68585856000615492565b614ade85858560006153b1565b614c4461583c565b600085600001518503905060405180608001604052808663ffffffff1681526020018263ffffffff168660020b0288602001510160060b81526020016000856001600160801b031611614c98576001614c9a565b845b6001600160801b031673ffffffff00000000000000000000000000000000608085901b1681614cc557fe5b048860400151016001600160a01b0316815260200160011515815250915050949350505050565b614cf461583c565b614cfc61583c565b888561ffff1661ffff8110614d0d57fe5b60408051608081018252919092015463ffffffff81168083526401000000008204600690810b810b900b6020840152600160581b82046001600160a01b031693830193909352600160f81b900460ff16151560608201529250614d7290899089615587565b15614daa578663ffffffff16826000015163ffffffff161415614d9457613bd8565b81614da183898988614c3c565b91509150613bd8565b888361ffff168660010161ffff1681614dbf57fe5b0661ffff1661ffff8110614dcf57fe5b60408051608081018252929091015463ffffffff811683526401000000008104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b90910416151560608201819052909250614e8657604080516080810182528a5463ffffffff811682526401000000008104600690810b810b900b6020830152600160581b81046001600160a01b031692820192909252600160f81b90910460ff161515606082015291505b614e9588836000015189615587565b614ecc576040805162461bcd60e51b815260206004820152600360248201526213d31160ea1b604482015290519081900360640190fd5b614ed9898989888761564a565b9150915097509795505050505050565b60028a810b900b600090815260208c90526040812080546001600160801b031682614f14828d613cb7565b9050846001600160801b0316816001600160801b03161115614f62576040805162461bcd60e51b81526020600482015260026024820152614c4f60f01b604482015290519081900360640190fd5b6001600160801b038281161590821615811415945015615038578c60020b8e60020b1361500857600183018b9055600283018a90556003830180547fffffffffff0000000000000000000000000000000000000000ffffffffffffff166701000000000000006001600160a01b038c16021766ffffffffffffff191666ffffffffffffff60068b900b161763ffffffff60d81b1916600160d81b63ffffffff8a16021790555b6003830180547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160f81b1790555b82546001600160801b0319166001600160801b0382161783558561508157825461507c9061507790600160801b9004600f90810b810b908f900b613a3b565b612eae565b6150a2565b82546150a29061507790600160801b9004600f90810b810b908f900b613a25565b8354600f9190910b6001600160801b03908116600160801b0291161790925550909c9b505050505050505050505050565b8060020b8260020b816150e257fe5b0760020b156150f057600080fd5b60008061510b8360020b8560020b8161510557fe5b056148d2565b600191820b820b60009081526020979097526040909620805460ff9097169190911b90951890945550505050565b600285810b80820b60009081526020899052604080822088850b850b83529082209193849391929184918291908a900b1261517f57505060018201546002830154615192565b8360010154880391508360020154870390505b6000808b60020b8b60020b12156151b4575050600183015460028401546151c7565b84600101548a0391508460020154890390505b92909803979097039b96909503949094039850939650505050505050565b6040805160a08101825285546001600160801b0390811682526001870154602083015260028701549282019290925260038601548083166060830152600160801b900490911660808201526000600f85900b6152845781516001600160801b031661527c576040805162461bcd60e51b815260206004820152600260248201526104e560f41b604482015290519081900360640190fd5b508051615293565b81516152909086613cb7565b90505b60006152b78360200151860384600001516001600160801b0316600160801b613950565b905060006152dd8460400151860385600001516001600160801b0316600160801b613950565b905086600f0b6000146153045787546001600160801b0319166001600160801b0384161788555b60018801869055600288018590556001600160801b03821615158061533257506000816001600160801b0316115b15615370576003880180546001600160801b031981166001600160801b039182168501821617808216600160801b9182900483168501909216021790555b5050505050505050565b600290810b810b6000908152602092909252604082208281556001810183905590810182905560030155565b808204910615150190565b600081156154245760006001600160a01b038411156153e7576153e284600160601b876001600160801b0316613950565b6153ff565b6001600160801b038516606085901b816153fd57fe5b045b905061541c6154176001600160a01b038816836132d0565b6157ea565b91505061489b565b60006001600160a01b038411156154525761544d84600160601b876001600160801b031661439c565b615469565b615469606085901b6001600160801b0387166153a6565b905080866001600160a01b03161161548057600080fd5b6001600160a01b03861603905061489b565b6000826154a057508361489b565b7bffffffffffffffffffffffffffffffff000000000000000000000000606085901b168215615540576001600160a01b038616848102908582816154e057fe5b0414156155115781810182811061550f5761550583896001600160a01b03168361439c565b935050505061489b565b505b61553782615532878a6001600160a01b0316868161552b57fe5b04906132d0565b6153a6565b9250505061489b565b6001600160a01b0386168481029085828161555757fe5b0414801561556457508082115b61556d57600080fd5b808203615505615417846001600160a01b038b168461439c565b60008363ffffffff168363ffffffff16111580156155b157508363ffffffff168263ffffffff1611155b156155cd578163ffffffff168363ffffffff1611159050612ea7565b60008463ffffffff168463ffffffff16116155f5578363ffffffff16640100000000016155fd565b8363ffffffff165b64ffffffffff16905060008563ffffffff168463ffffffff161161562e578363ffffffff1664010000000001615636565b8363ffffffff165b64ffffffffff169091111595945050505050565b61565261583c565b61565a61583c565b60008361ffff168560010161ffff168161567057fe5b0661ffff169050600060018561ffff16830103905060005b506002818301048961ffff8716828161569d57fe5b0661ffff81106156a957fe5b60408051608081018252929091015463ffffffff811683526401000000008104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b9091041615156060820181905290955061571457806001019250615688565b898661ffff16826001018161572557fe5b0661ffff811061573157fe5b60408051608081018252929091015463ffffffff811683526401000000008104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b9091041615156060820152855190945060009061579c908b908b615587565b90508080156157b557506157b58a8a8760000151615587565b156157c057506157dd565b806157d0576001820392506157d7565b8160010193505b50615688565b5050509550959350505050565b806001600160a01b0381168114612dcc57600080fd5b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6040805160808101825260008082526020820181905291810182905260608101919091529056fea164736f6c6343000706000aa164736f6c6343000706000ac66a3fdf07232cdd185febcc6579d408c241b47ae2f9907d84be655141eeaecc",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063890357301161005b57806389035730146101605780638a7c195f146101aa5780638da5cb5b146101d5578063a1671295146101dd57610088565b806313af40351461008d5780631698ee82146100b557806322afcccb1461010d5780636333ff4e14610146575b600080fd5b6100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610219565b005b6100f1600480360360608110156100cb57600080fd5b5080356001600160a01b03908116916020810135909116906040013562ffffff1661028c565b604080516001600160a01b039092168252519081900360200190f35b61012f6004803603602081101561012357600080fd5b503562ffffff166102b8565b6040805160029290920b8252519081900360200190f35b61014e6102cd565b60408051918252519081900360200190f35b6101686102d3565b604080516001600160a01b0396871681529486166020860152929094168383015262ffffff16606083015260029290920b608082015290519081900360a00190f35b6100b3600480360360408110156101c057600080fd5b5062ffffff813516906020013560020b610309565b6100f16103cc565b6100f1600480360360608110156101f357600080fd5b5080356001600160a01b03908116916020810135909116906040013562ffffff166103db565b6003546001600160a01b0316331461023057600080fd5b6003546040516001600160a01b038084169216907fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c90600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b60056020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b60046020526000908152604090205460020b81565b61271081565b600054600154600280546001600160a01b03938416939283169281169162ffffff600160a01b83041691600160b81b9004900b85565b6003546001600160a01b0316331461032057600080fd5b620f42408262ffffff161061033457600080fd5b60008160020b13801561034b57506140008160020b125b61035457600080fd5b62ffffff8216600090815260046020526040902054600290810b900b1561037a57600080fd5b62ffffff828116600081815260046020526040808220805462ffffff1916600287900b958616179055517fc66a3fdf07232cdd185febcc6579d408c241b47ae2f9907d84be655141eeaecc9190a35050565b6003546001600160a01b031681565b60006103e5610571565b826001600160a01b0316846001600160a01b0316141561040457600080fd5b600080846001600160a01b0316866001600160a01b03161061042757848661042a565b85855b90925090506001600160a01b03821661044257600080fd5b62ffffff8416600090815260046020526040902054600290810b9081900b61046957600080fd5b6001600160a01b0383811660009081526005602090815260408083208685168452825280832062ffffff8a16845290915290205416156104a857600080fd5b6104b530848488856105a8565b6001600160a01b03808516600081815260056020818152604080842089871680865290835281852062ffffff8e168087529084528286208054988a166001600160a01b0319998a1681179091558287529484528286208787528452828620818752845294829020805490971684179096558051600289900b815291820192909252815195995091947f783cca1c0412dd0d695e784568c96da2e9c22ff989357a2e8b1d9b2b4e6b71189281900390910190a45050509392505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105a657600080fd5b565b6040805160a0810182526001600160a01b03878116808352878216602080850182905292881684860181905262ffffff888116606080880182905260028a810b6080998a01819052600080546001600160a01b03199081169099178155600180548a1689179055825490981686177fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff16600160a01b8502177fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff16600160b81b91830b90951602939093179092558751808701949094528388019290925282810191909152855180830390910181529301938490528251929091019190912090916106b190610720565b8190604051809103906000f59050801580156106d1573d6000803e3d6000fd5b50600080546001600160a01b0319908116909155600180549091169055600280547fffffffffffff00000000000000000000000000000000000000000000000000001690559695505050505050565b615ac98061072e8339019056fe6101606040523480156200001257600080fd5b503060601b60805260408051630890357360e41b81529051600091339163890357309160048082019260a092909190829003018186803b1580156200005657600080fd5b505afa1580156200006b573d6000803e3d6000fd5b505050506040513d60a08110156200008257600080fd5b508051602080830151604084015160608086015160809096015160e896871b6001600160e81b0319166101005291811b6001600160601b031990811660e05292811b831660c0529390931b1660a052600282810b900b90921b610120529150620000f79082906200010f811b62002d6517901c565b60801b6001600160801b03191661014052506200017d565b60008082600281900b620d89e719816200012557fe5b05029050600083600281900b620d89e8816200013d57fe5b0502905060008460020b83830360020b816200015557fe5b0560010190508062ffffff166001600160801b038016816200017357fe5b0495945050505050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160e81c6101205160e81c6101405160801c61587062000259600039806121c4528061473952806147705250806111275280612adf52806147a452806147d65250806112185280611b975280611bce5280612b275250806117a452806118d35280611c5152806120c4528061261c5280612b0352806132865250806108ee528061176c528061190b5280611c20528061205e5280612596528061314d525080610fdb528061225152806124555280612abb525080612ddc52506158706000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c80636e88a7bd116100f9578063c45a015511610097578063ddca3f4311610071578063ddca3f431461081c578063f30583991461083c578063f30dba9314610844578063f637731d146108c6576101b9565b8063c45a0155146107ed578063d0c93a7c146107f5578063d21220a714610814576101b9565b806385b66729116100d357806385b6672914610612578063883bdbfd1461064f578063a34123a714610758578063a38807f214610792576101b9565b80636e88a7bd146105da57806370cf754a146105e25780638206a4d1146105ea576101b9565b80633c8a7d8d11610166578063490e6cbc11610140578063490e6cbc146104845780634f1eb3d814610510578063514ea4bf146105615780635339c296146105ba576101b9565b80633c8a7d8d1461031057806346141319146103cb57806346964149146103e5576101b9565b8063252c09d711610197578063252c09d71461023d57806332148f67146102945780633850c7bd146102b7576101b9565b80630dfe1681146101be5780631a686502146101e25780631ad8b03b14610206575b600080fd5b6101c66108ec565b604080516001600160a01b039092168252519081900360200190f35b6101ea610910565b604080516001600160801b039092168252519081900360200190f35b61020e61091f565b60405180836001600160801b03168152602001826001600160801b031681526020019250505060405180910390f35b61025a6004803603602081101561025357600080fd5b5035610939565b6040805163ffffffff909516855260069390930b60208501526001600160a01b039091168383015215156060830152519081900360800190f35b6102b5600480360360208110156102aa57600080fd5b503561ffff1661097f565b005b6102bf610a79565b604080516001600160a01b03909816885260029690960b602088015261ffff9485168787015292841660608701529216608085015260ff90911660a0840152151560c0830152519081900360e00190f35b6103b2600480360360a081101561032657600080fd5b6001600160a01b03823516916020810135600290810b92604083013590910b916001600160801b036060820135169181019060a08101608082013564010000000081111561037357600080fd5b82018360208201111561038557600080fd5b803590602001918460018302840111640100000000831117156103a757600080fd5b509092509050610ac9565b6040805192835260208301919091528051918290030190f35b6103d3610d87565b60408051918252519081900360200190f35b6103b2600480360360c08110156103fb57600080fd5b6001600160a01b0382358116926020810135151592604082013592606083013516919081019060a08101608082013564010000000081111561043c57600080fd5b82018360208201111561044e57600080fd5b8035906020019184600183028401116401000000008311171561047057600080fd5b9193509150356001600160a01b0316610d8d565b6102b56004803603608081101561049a57600080fd5b6001600160a01b0382351691602081013591604082013591908101906080810160608201356401000000008111156104d157600080fd5b8201836020820111156104e357600080fd5b8035906020019184600183028401116401000000008311171561050557600080fd5b509092509050611af4565b61020e600480360360a081101561052657600080fd5b506001600160a01b03813516906020810135600290810b91604081013590910b906001600160801b0360608201358116916080013516611f4f565b61057e6004803603602081101561057757600080fd5b503561216d565b604080516001600160801b0396871681526020810195909552848101939093529084166060840152909216608082015290519081900360a00190f35b6103d3600480360360208110156105d057600080fd5b503560010b6121aa565b6103d36121bc565b6101ea6121c2565b6102b56004803603604081101561060057600080fd5b5060ff813581169160200135166121e6565b61020e6004803603606081101561062857600080fd5b506001600160a01b03813516906001600160801b03602082013581169160400135166123e5565b6106bf6004803603602081101561066557600080fd5b81019060208101813564010000000081111561068057600080fd5b82018360208201111561069257600080fd5b803590602001918460208302840111640100000000831117156106b457600080fd5b5090925090506126b4565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156107035781810151838201526020016106eb565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561074257818101518382015260200161072a565b5050505090500194505050505060405180910390f35b6103b26004803603606081101561076e57600080fd5b508035600290810b91602081013590910b90604001356001600160801b0316612744565b6107bc600480360360408110156107a857600080fd5b508035600290810b9160200135900b6128c0565b6040805160069490940b84526001600160a01b03909216602084015263ffffffff1682820152519081900360600190f35b6101c6612ab9565b6107fd612add565b6040805160029290920b8252519081900360200190f35b6101c6612b01565b610824612b25565b6040805162ffffff9092168252519081900360200190f35b6103d3612b49565b6108646004803603602081101561085a57600080fd5b503560020b612b4f565b604080516001600160801b039099168952600f9790970b602089015287870195909552606087019390935260069190910b60808601526001600160a01b031660a085015263ffffffff1660c0840152151560e083015251908190036101000190f35b6102b5600480360360208110156108dc57600080fd5b50356001600160a01b0316612bbf565b7f000000000000000000000000000000000000000000000000000000000000000081565b6005546001600160801b031681565b6004546001600160801b0380821691600160801b90041682565b60098161ffff811061094a57600080fd5b015463ffffffff81169150640100000000810460060b90600160581b81046001600160a01b031690600160f81b900460ff1684565b600154600160f01b900460ff166109c3576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6001805460ff60f01b191690556109d8612dd1565b600154600160d81b900461ffff1660006109f460098385612e08565b6001805461ffff808416600160d81b810261ffff60d81b1990931692909217909255919250831614610a61576040805161ffff80851682528316602082015281517fac49e518f90a358f652e4400164f05a5d8f7e35e7747279bc3a93dbf584e125a929181900390910190a15b50506001805460ff60f01b1916600160f01b17905550565b6001546001600160a01b03811690600160a01b810460020b9061ffff600160b81b8204811691600160c81b8104821691600160d81b8204169060ff600160e81b8204811691600160f01b90041687565b6001546000908190600160f01b900460ff16610b12576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6001805460ff60f01b191690556001600160801b038516610b3257600080fd5b600080610b8060405180608001604052808c6001600160a01b031681526020018b60020b81526020018a60020b8152602001610b768a6001600160801b0316612eae565b600f0b9052612ebf565b92509250508193508092506000806000861115610ba257610b9f6130ff565b91505b8415610bb357610bb0613238565b90505b336001600160a01b031663b6adba4287878b8b6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015610c3557600080fd5b505af1158015610c49573d6000803e3d6000fd5b505050506000861115610ca057610c5e6130ff565b610c6883886132d0565b1115610ca0576040805162461bcd60e51b815260206004820152600260248201526104d360f41b604482015290519081900360640190fd5b8415610cf057610cae613238565b610cb882876132d0565b1115610cf0576040805162461bcd60e51b81526020600482015260026024820152614d3160f01b604482015290519081900360640190fd5b8960020b8b60020b8d6001600160a01b03167f7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde338d8b8b60405180856001600160a01b03168152602001846001600160801b0316815260200183815260200182815260200194505050505060405180910390a450506001805460ff60f01b1916600160f01b17905550919890975095505050505050565b60035481565b600080610d98612dd1565b86610dcf576040805162461bcd60e51b8152602060048201526002602482015261415360f01b604482015290519081900360640190fd5b6040805160e0810182526001546001600160a01b0381168252600160a01b8104600290810b810b900b602083015261ffff600160b81b8204811693830193909352600160c81b810483166060830152600160d81b8104909216608082015260ff600160e81b8304811660a0830152600160f01b909204909116151560c08201819052610e88576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b88610ed35780600001516001600160a01b0316876001600160a01b0316118015610ece575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038816105b610f05565b80600001516001600160a01b0316876001600160a01b0316108015610f0557506401000276a36001600160a01b038816115b610f3c576040805162461bcd60e51b815260206004820152600360248201526214d41360ea1b604482015290519081900360640190fd5b6001805460ff60f01b191690556040805161010081019091528915158152600090602081018b610f775760048460a0015160ff16901c610f8a565b60108460a0015160ff1681610f8857fe5b065b60ff1681526005546001600160801b03166020820152604001610fab6132e6565b63ffffffff168152602001600060060b815260200160006001600160a01b031681526020016000151581526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636333ff4e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561103257600080fd5b505afa158015611046573d6000803e3d6000fd5b505050506040513d602081101561105c57600080fd5b5051905260408051610100810182528b81526000602082810182905286516001600160a01b0316938301939093529185015160020b606082015291925090608081018c6110ab576003546110af565b6002545b81526000602082018190526005546001600160801b0316604083015260609091015290505b8051158015906110fa5750886001600160a01b031681604001516001600160a01b031614155b1561153f57611107615800565b60408201516001600160a01b031681526060820151835161114c916007917f0000000000000000000000000000000000000000000000000000000000000000906132ea565b15156040830152600290810b810b60208301819052620d89e719910b121561117d57620d89e719602082015261119c565b6020810151620d89e860029190910b131561119c57620d89e860208201525b6111a9816020015161342c565b6001600160a01b031660608201526040820151835161123c91906111e5578b6001600160a01b031683606001516001600160a01b0316116111ff565b8b6001600160a01b031683606001516001600160a01b0316105b61120d57826060015161120f565b8b5b60c085015185517f000000000000000000000000000000000000000000000000000000000000000061375e565b60c0850190815260a085019190915260808401919091526001600160a01b0390911660408401525160e084015160009161127d91620f424090810390613950565b90506000611298828460c001516139ff90919063ffffffff16565b60e0850180518201905260c08401839052905060008d13156112f3576112c78360c00151846080015101613a0f565b845103845260a08301516112e9906112de90613a0f565b602086015190613a25565b602085015261132e565b6113008360a00151613a0f565b845101845260c083015160808401516113289161131d9101613a0f565b602086015190613a3b565b60208501525b602085015160ff1615611377576000856020015160ff168460c001518161135157fe5b60c0860180519290910491829003905260a0860180519091016001600160801b03169052505b60c08401516001600160801b0316156113b6576113aa8360c00151600160801b8660c001516001600160801b0316613950565b60808501805190910190525b82606001516001600160a01b031684604001516001600160a01b031614156114fc578260400151156114d2578460c001516114405761141e856060015160008860200151896040015189604001518b606001516009613a51909695949392919063ffffffff16565b6001600160a01b031660a0870152600690810b900b6080860152600160c08601525b845160009061145157600254611457565b84608001515b90506000866000015161146e578560800151611472565b6003545b905060006114a4866020015184848b60a001518c608001518d606001516006613be4909695949392919063ffffffff16565b8851909150156114b2576000035b6114c08760c0015182613cb7565b6001600160801b031660c08801525050505b84516114e25782602001516114eb565b60018360200151035b600290810b900b6060850152611537565b82600001516001600160a01b031684604001516001600160a01b0316146115375761152a8460400151613d6d565b600290810b900b60608501525b5050506110d4565b826020015160020b816060015160020b1461161a5760008061158d856040015185606001518760200151876040015189606001518a608001516009614099909695949392919063ffffffff16565b604085015160608601516001805461ffff60c81b1916600160c81b61ffff958616021761ffff60b81b1916600160b81b95909416949094029290921762ffffff60a01b1916600160a01b62ffffff60029490940b93909316929092029190911773ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161790555061164c9050565b60408101516001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911790555b8060c001516001600160801b031682604001516001600160801b0316146116925760c0810151600580546001600160801b0319166001600160801b039092169190911790555b8151156116e357608081015160025560a08101516001600160801b0316156116de5760a0810151600480546001600160801b031981166001600160801b03918216909301169190911790555b611729565b608081015160035560a08101516001600160801b0316156117295760a0810151600480546001600160801b03808216600160801b92839004821690940116029190911790555b8151151560008b131461174457602081015181518b03611751565b80600001518a0381602001515b83519196509450156118c45760e081015115611796576117967f0000000000000000000000000000000000000000000000000000000000000000878360e0015161424e565b60008412156117cd576117cd7f00000000000000000000000000000000000000000000000000000000000000008d8660000361424e565b60006117d76130ff565b9050336001600160a01b031663101e860587878c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561185b57600080fd5b505af115801561186f573d6000803e3d6000fd5b5050505061187b6130ff565b61188582886132d0565b11156118be576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b50611a27565b60e0810151156118fd576118fd7f0000000000000000000000000000000000000000000000000000000000000000878360e0015161424e565b6000851215611934576119347f00000000000000000000000000000000000000000000000000000000000000008d8760000361424e565b600061193e613238565b9050336001600160a01b031663101e860587878c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b1580156119c257600080fd5b505af11580156119d6573d6000803e3d6000fd5b505050506119e2613238565b6119ec82876132d0565b1115611a25576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b505b8b6001600160a01b0316336001600160a01b03167fbb875702d7648509d1df9b29b9a960b30ff7571d278414eaa2d3ca2596ef5079878785604001518660c0015187606001518d8960e0015160405180888152602001878152602001866001600160a01b03168152602001856001600160801b031681526020018460020b8152602001836001600160a01b0316815260200182815260200197505050505050505060405180910390a350506001805460ff60f01b1916600160f01b17905550909890975095505050505050565b600154600160f01b900460ff16611b38576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6001805460ff60f01b19169055611b4d612dd1565b6005546001600160801b031680611b8f576040805162461bcd60e51b81526020600482015260016024820152601360fa1b604482015290519081900360640190fd5b6000611bc4867f000000000000000000000000000000000000000000000000000000000000000062ffffff16620f424061439c565b90506000611bfb867f000000000000000000000000000000000000000000000000000000000000000062ffffff16620f424061439c565b90506000611c076130ff565b90506000611c13613238565b90508815611c4657611c467f00000000000000000000000000000000000000000000000000000000000000008b8b61424e565b8715611c7757611c777f00000000000000000000000000000000000000000000000000000000000000008b8a61424e565b336001600160a01b031663506621b685858a8a6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015611cf957600080fd5b505af1158015611d0d573d6000803e3d6000fd5b505050506000611d1b6130ff565b90506000611d27613238565b905081611d3485886132d0565b1115611d6c576040805162461bcd60e51b8152602060048201526002602482015261046360f41b604482015290519081900360640190fd5b80611d7784876132d0565b1115611daf576040805162461bcd60e51b8152602060048201526002602482015261463160f01b604482015290519081900360640190fd5b8382038382038115611e3e57600154600160e81b9004600f1660008115611de2578160ff168481611ddc57fe5b04611de5565b60005b90506001600160801b03811615611e1857600480546001600160801b038082168401166001600160801b03199091161790555b611e32818503600160801b8d6001600160801b0316613950565b60028054909101905550505b8015611ec957600154600160e81b900460041c600f1660008115611e6e578160ff168381611e6857fe5b04611e71565b60005b90506001600160801b03811615611ea357600480546001600160801b03600160801b8083048216850182160291161790555b611ebd818403600160801b8d6001600160801b0316613950565b60038054909101905550505b8d6001600160a01b0316336001600160a01b03167fbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca6338f8f86866040518085815260200184815260200183815260200182815260200194505050505060405180910390a350506001805460ff60f01b1916600160f01b179055505050505050505050505050565b6001546000908190600160f01b900460ff16611f98576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6001805460ff60f01b191690556000611fb460083389896143d6565b60038101549091506001600160801b0390811690861611611fd55784611fe4565b60038101546001600160801b03165b60038201549093506001600160801b03600160801b90910481169085161161200c5783612022565b6003810154600160801b90046001600160801b03165b91506001600160801b03831615612087576003810180546001600160801b031981166001600160801b03918216869003821617909155612087907f0000000000000000000000000000000000000000000000000000000000000000908a90861661424e565b6001600160801b038216156120ed576003810180546001600160801b03600160801b8083048216869003821602918116919091179091556120ed907f0000000000000000000000000000000000000000000000000000000000000000908a90851661424e565b604080516001600160a01b038a1681526001600160801b0380861660208301528416818301529051600288810b92908a900b9133917f70935338e69775456a85ddef226c395fb668b63fa0115f5f20610b388e6ca9c0919081900360600190a4506001805460ff60f01b1916600160f01b17905590969095509350505050565b60086020526000908152604090208054600182015460028301546003909301546001600160801b0392831693919281811691600160801b90041685565b60076020526000908152604090205481565b60005481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600154600160f01b900460ff1661222a576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6001805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691638da5cb5b916004808301926020929190829003018186803b15801561229757600080fd5b505afa1580156122ab573d6000803e3d6000fd5b505050506040513d60208110156122c157600080fd5b50516001600160a01b031633146122d757600080fd5b60ff821615806122fa575060048260ff16101580156122fa5750600a8260ff1611155b8015612324575060ff81161580612324575060048160ff16101580156123245750600a8160ff1611155b61232d57600080fd5b60018054610ff0600484901b16840160ff908116600160e81b9081027fffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841617909355919004167f973d8d92bb299f4af6ce49b52a8adb85ae46b9f214c4c4fc06ac77401237b1336010826040805160ff9390920683168252600f600486901c16602083015286831682820152918516606082015290519081900360800190a150506001805460ff60f01b1916600160f01b17905550565b6001546000908190600160f01b900460ff1661242e576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6001805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691638da5cb5b916004808301926020929190829003018186803b15801561249b57600080fd5b505afa1580156124af573d6000803e3d6000fd5b505050506040513d60208110156124c557600080fd5b50516001600160a01b031633146124db57600080fd5b6004546001600160801b03908116908516116124f75783612504565b6004546001600160801b03165b6004549092506001600160801b03600160801b90910481169084161161252a578261253e565b600454600160801b90046001600160801b03165b90506001600160801b038216156125bf576004546001600160801b038381169116141561256d57600019909101905b600480546001600160801b031981166001600160801b039182168590038216179091556125bf907f0000000000000000000000000000000000000000000000000000000000000000908790851661424e565b6001600160801b03811615612645576004546001600160801b03828116600160801b9092041614156125f057600019015b600480546001600160801b03600160801b808304821685900382160291811691909117909155612645907f0000000000000000000000000000000000000000000000000000000000000000908790841661424e565b604080516001600160801b0380851682528316602082015281516001600160a01b0388169233927f596b573906218d3411850b26a6b437d6c4522fdb43d2d2386263f86d50b8b151929081900390910190a36001805460ff60f01b1916600160f01b1790559094909350915050565b6060806126bf612dd1565b6127396126ca6132e6565b85858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600154600554600995949350600160a01b820460020b925061ffff600160b81b83048116926001600160801b0390921691600160c81b90041661443a565b915091509250929050565b6001546000908190600160f01b900460ff1661278d576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6001805460ff60f01b1916905560408051608081018252338152600287810b602083015286900b91810191909152600090819081906127e990606081016127dc6001600160801b038a16612eae565b600003600f0b9052612ebf565b925092509250816000039450806000039350600085118061280a5750600084115b15612849576003830180546001600160801b038082168089018216600160801b93849004831689019092169092029091176001600160801b0319161790555b604080516001600160801b0388168152602081018790528082018690529051600289810b92908b900b9133917f0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c919081900360600190a450506001805460ff60f01b1916600160f01b179055509094909350915050565b60008060006128cd612dd1565b6128d78585614594565b600285810b810b600090815260066020819052604080832088850b90940b8352822060038401549182900b9367010000000000000083046001600160a01b0316928492600160d81b820463ffffffff16928492909190600160f81b900460ff168061294157600080fd5b6003820154600681900b985067010000000000000081046001600160a01b03169650600160d81b810463ffffffff169450600160f81b900460ff168061298657600080fd5b50506040805160e0810182526001546001600160a01b0381168252600160a01b8104600290810b810b810b6020840181905261ffff600160b81b8404811695850195909552600160c81b830485166060850152600160d81b8304909416608084015260ff600160e81b8304811660a0850152600160f01b909204909116151560c08301529093508e810b91900b12159050612a2f57509390940396509003935090039050612ab2565b8a60020b816020015160020b1215612aa3576000612a4b6132e6565b6020830151604084015160055460608601519394506000938493612a81936009938893879392916001600160801b031690613a51565b9a9003989098039b505094909603929092039650909103039250612ab2915050565b50949093039650039350900390505b9250925092565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025481565b60066020819052600091825260409091208054600182015460028301546003909301546001600160801b03831694600160801b909304600f0b93919281900b9067010000000000000081046001600160a01b031690600160d81b810463ffffffff1690600160f81b900460ff1688565b6001546001600160a01b031615612c02576040805162461bcd60e51b8152602060048201526002602482015261414960f01b604482015290519081900360640190fd5b6000612c0d82613d6d565b9050600080612c25612c1d6132e6565b60099061465d565b6040805160e0810182526001600160a01b038816808252600288810b6020808501829052600085870181905261ffff898116606088018190529089166080880181905260a0880192909252600160c09097018790528654600160f01b73ffffffffffffffffffffffffffffffffffffffff19909116871762ffffff60a01b1916600160a01b62ffffff9787900b9790971696909602959095177fffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffff16600160c81b9091021761ffff60d81b1916600160d81b909102177fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1692909217909355835191825281019190915281519395509193507f98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c9592918290030190a150505050565b60008082600281900b620d89e71981612d7a57fe5b05029050600083600281900b620d89e881612d9157fe5b0502905060008460020b83830360020b81612da857fe5b0560010190508062ffffff166001600160801b03801681612dc557fe5b0493505050505b919050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612e0657600080fd5b565b6000808361ffff1611612e46576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b8261ffff168261ffff1611612e5c575081612ea7565b825b8261ffff168161ffff161015612ea2576001858261ffff1661ffff8110612e8157fe5b01805463ffffffff191663ffffffff92909216919091179055600101612e5e565b508190505b9392505050565b80600f81900b8114612dcc57600080fd5b6000806000612ecc612dd1565b612ede84602001518560400151614594565b6040805160e0810182526001546001600160a01b0381168252600160a01b8104600290810b810b900b602080840182905261ffff600160b81b8404811685870152600160c81b84048116606080870191909152600160d81b8504909116608086015260ff600160e81b8504811660a0870152600160f01b909404909316151560c085015288519089015194890151928901519394612f8294919390929091906146a9565b93508460600151600f0b6000146130f757846020015160020b816020015160020b1215612fd757612fd0612fb9866020015161342c565b612fc6876040015161342c565b876060015161485e565b92506130f7565b846040015160020b816020015160020b12156130cd5760055460408201516001600160801b03909116906130299061300d6132e6565b6020850151606086015160808701516009949392918791614099565b6001805461ffff60c81b1916600160c81b61ffff938416021761ffff60b81b1916600160b81b939092169290920217905581516040870151613079919061306f9061342c565b886060015161485e565b935061309761308b876020015161342c565b835160608901516148a3565b92506130a7818760600151613cb7565b600580546001600160801b0319166001600160801b0392909216919091179055506130f7565b6130f46130dd866020015161342c565b6130ea876040015161342c565b87606001516148a3565b91505b509193909250565b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693919290918291908083835b602083106131985780518252601f199092019160209182019101613179565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146131f8576040519150601f19603f3d011682016040523d82523d6000602084013e6131fd565b606091505b509150915081801561321157506020815110155b61321a57600080fd5b80806020019051602081101561322f57600080fd5b50519250505090565b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169391929091829190808383602083106131985780518252601f199092019160209182019101613179565b808201828110156132e057600080fd5b92915050565b4290565b60008060008460020b8660020b816132fe57fe5b05905060008660020b12801561332557508460020b8660020b8161331e57fe5b0760020b15155b1561332f57600019015b83156133a457600080613341836148d2565b600182810b810b600090815260208d9052604090205460ff83169190911b8001600019019081168015159750929450909250908561338657888360ff16860302613399565b88613390826148e4565b840360ff168603025b965050505050613422565b6000806133b3836001016148d2565b91509150600060018260ff166001901b031990506000818b60008660010b60010b815260200190815260200160002054169050806000141595508561340557888360ff0360ff1686600101010261341b565b888361341083614984565b0360ff168660010101025b9650505050505b5094509492505050565b60008060008360020b12613443578260020b61344b565b8260020b6000035b9050620d89e8811115613489576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b60006001821661349d57600160801b6134af565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff16905060028216156134e3576ffff97272373d413259a46990580e213a0260801c5b6004821615613502576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615613521576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615613540576fffcb9843d60f6159c9db58835c9266440260801c5b602082161561355f576fff973b41fa98c081472e6896dfb254c00260801c5b604082161561357e576fff2ea16466c96a3843ec78b326b528610260801c5b608082161561359d576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156135bd576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b6102008216156135dd576ff987a7253ac413176f2b074cf7815e540260801c5b6104008216156135fd576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161561361d576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161561363d576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161561365d576fa9f746462d870fdf8a65dc1f90e061e50260801c5b61400082161561367d576f70d869a156d2a1b890bb3df62baf32f70260801c5b61800082161561369d576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156136be576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156136de576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156136fd576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161561371a576b048a170391f7dc42444e8fa20260801c5b60008460020b131561373557806000198161373157fe5b0490505b64010000000081061561374957600161374c565b60005b60ff16602082901c0192505050919050565b60008080806001600160a01b03808916908a1610158187128015906137e35760006137978989620f42400362ffffff16620f4240613950565b9050826137b0576137ab8c8c8c6001614a6e565b6137bd565b6137bd8b8d8c6001614ae7565b95508581106137ce578a96506137dd565b6137da8c8b8386614ba4565b96505b5061382d565b816137fa576137f58b8b8b6000614ae7565b613807565b6138078a8c8b6000614a6e565b935083886000031061381b5789955061382d565b61382a8b8a8a60000385614bf0565b95505b6001600160a01b038a81169087161482156138905780801561384c5750815b6138625761385d878d8c6001614ae7565b613864565b855b9550808015613871575081155b61388757613882878d8c6000614a6e565b613889565b845b94506138da565b80801561389a5750815b6138b0576138ab8c888c6001614a6e565b6138b2565b855b95508080156138bf575081155b6138d5576138d08c888c6000614ae7565b6138d7565b845b94505b811580156138ea57508860000385115b156138f6578860000394505b81801561391557508a6001600160a01b0316876001600160a01b031614155b15613924578589039350613941565b61393e868962ffffff168a620f42400362ffffff1661439c565b93505b50505095509550955095915050565b6000808060001985870986860292508281109083900303905080613986576000841161397b57600080fd5b508290049050612ea7565b80841161399257600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b808203828111156132e057600080fd5b6000600160ff1b8210613a2157600080fd5b5090565b808203828113156000831215146132e057600080fd5b818101828112156000831215146132e057600080fd5b60008063ffffffff8716613af8576000898661ffff1661ffff8110613a7257fe5b60408051608081018252919092015463ffffffff8082168084526401000000008304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff16151560608301529092508a1614613ae457613ae1818a8988614c3c565b90505b806020015181604001519250925050613bd8565b868803600080613b0d8c8c858c8c8c8c614cec565b91509150816000015163ffffffff168363ffffffff161415613b3f578160200151826040015194509450505050613bd8565b805163ffffffff84811691161415613b67578060200151816040015194509450505050613bd8565b8151815160208085015190840151918390039286039163ffffffff80841692908516910360060b81613b9557fe5b05028460200151018263ffffffff168263ffffffff1686604001518660400151036001600160a01b03160281613bc757fe5b048560400151019650965050505050505b97509795505050505050565b600295860b860b60009081526020979097526040909620600181018054909503909455938301805490920390915560038201805463ffffffff600160d81b6001600160a01b036701000000000000008085048216909603169094027fffffffffff0000000000000000000000000000000000000000ffffffffffffff90921691909117600681810b90960390950b66ffffffffffffff1666ffffffffffffff199095169490941782810485169095039093160263ffffffff60d81b1990931692909217905554600160801b9004600f0b90565b60008082600f0b1215613d1c57826001600160801b03168260000384039150816001600160801b031610613d17576040805162461bcd60e51b81526020600482015260026024820152614c5360f01b604482015290519081900360640190fd5b6132e0565b826001600160801b03168284019150816001600160801b031610156132e0576040805162461bcd60e51b81526020600482015260026024820152614c4160f01b604482015290519081900360640190fd5b60006401000276a36001600160a01b03831610801590613da9575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b613dde576040805162461bcd60e51b81526020600482015260016024820152602960f91b604482015290519081900360640190fd5b77ffffffffffffffffffffffffffffffffffffffff00000000602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c97908811961790941790921717909117171760808110613e7f57607f810383901c9150613e89565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b1461408a57886001600160a01b031661406e8261342c565b6001600160a01b031611156140835781614085565b805b61408c565b815b9998505050505050505050565b6000806000898961ffff1661ffff81106140af57fe5b60408051608081018252919092015463ffffffff8082168084526401000000008304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff16151560608301529092508916141561411f5788859250925050613bd8565b8461ffff168461ffff1611801561414057506001850361ffff168961ffff16145b1561414d57839150614151565b8491505b8161ffff168960010161ffff168161416557fe5b06925061417481898989614c3c565b8a8461ffff1661ffff811061418557fe5b825191018054602084015160408501516060909501511515600160f81b027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001600160a01b03909616600160581b027fff0000000000000000000000000000000000000000ffffffffffffffffffffff60069390930b66ffffffffffffff16640100000000026affffffffffffff000000001963ffffffff90971663ffffffff199095169490941795909516929092171692909217929092161790555097509795505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b602083106142ca5780518252601f1990920191602091820191016142ab565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461432c576040519150601f19603f3d011682016040523d82523d6000602084013e614331565b606091505b509150915081801561435f57508051158061435f575080806020019051602081101561435c57600080fd5b50515b614395576040805162461bcd60e51b81526020600482015260026024820152612a2360f11b604482015290519081900360640190fd5b5050505050565b60006143a9848484613950565b9050600082806143b557fe5b8486091115612ea75760001981106143cc57600080fd5b6001019392505050565b6040805160609490941b6bffffffffffffffffffffffff1916602080860191909152600293840b60e890811b60348701529290930b90911b60378401528051808403601a018152603a90930181528251928201929092206000908152929052902090565b60608060008361ffff161161447a576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b865167ffffffffffffffff8111801561449257600080fd5b506040519080825280602002602001820160405280156144bc578160200160208202803683370190505b509150865167ffffffffffffffff811180156144d757600080fd5b50604051908082528060200260200182016040528015614501578160200160208202803683370190505b50905060005b8751811015614587576145328a8a8a848151811061452157fe5b60200260200101518a8a8a8a613a51565b84838151811061453e57fe5b6020026020010184848151811061455157fe5b60200260200101826001600160a01b03166001600160a01b03168152508260060b60060b81525050508080600101915050614507565b5097509795505050505050565b8060020b8260020b126145d4576040805162461bcd60e51b8152602060048201526003602482015262544c5560e81b604482015290519081900360640190fd5b620d89e719600283900b1215614617576040805162461bcd60e51b8152602060048201526003602482015262544c4d60e81b604482015290519081900360640190fd5b620d89e8600282900b1315614659576040805162461bcd60e51b815260206004820152600360248201526254554d60e81b604482015290519081900360640190fd5b5050565b6040805160808101825263ffffffff9283168082526000602083018190529282019290925260016060909101819052835463ffffffff1916909117909116600160f81b17909155908190565b60006146b860088787876143d6565b60025460035491925090600080600f87900b156147fe5760006146d96132e6565b60015460055491925060009182916147239160099186918591600160a01b810460020b9161ffff600160b81b83048116926001600160801b0390921691600160c81b900416613a51565b909250905061475d60068d8b8d8b8b87898b60007f0000000000000000000000000000000000000000000000000000000000000000614ee9565b945061479460068c8b8d8b8b87898b60017f0000000000000000000000000000000000000000000000000000000000000000614ee9565b935084156147c8576147c860078d7f00000000000000000000000000000000000000000000000000000000000000006150d3565b83156147fa576147fa60078c7f00000000000000000000000000000000000000000000000000000000000000006150d3565b5050505b60008061481060068c8c8b8a8a615139565b9092509050614821878a84846151e5565b600089600f0b121561484f57831561483e5761483e60068c61537a565b821561484f5761484f60068b61537a565b50505050505095945050505050565b60008082600f0b126148845761487f61487a8585856001614ae7565b613a0f565b61489b565b61489761487a8585856000036000614ae7565b6000035b949350505050565b60008082600f0b126148bf5761487f61487a8585856001614a6e565b61489761487a8585856000036000614a6e565b60020b600881901d9161010090910790565b60008082116148f257600080fd5b600160801b821061490557608091821c91015b68010000000000000000821061491d57604091821c91015b640100000000821061493157602091821c91015b62010000821061494357601091821c91015b610100821061495457600891821c91015b6010821061496457600491821c91015b6004821061497457600291821c91015b60028210612dcc57600101919050565b600080821161499257600080fd5b5060ff6001600160801b038216156149ad57607f19016149b5565b608082901c91505b67ffffffffffffffff8216156149ce57603f19016149d6565b604082901c91505b63ffffffff8216156149eb57601f19016149f3565b602082901c91505b61ffff821615614a0657600f1901614a0e565b601082901c91505b60ff821615614a205760071901614a28565b600882901c91505b600f821615614a3a5760031901614a42565b600482901c91505b6003821615614a545760011901614a5c565b600282901c91505b6001821615612dcc5760001901919050565b6000836001600160a01b0316856001600160a01b03161115614a8e579293925b81614abb57614ab6836001600160801b03168686036001600160a01b0316600160601b613950565b614ade565b614ade836001600160801b03168686036001600160a01b0316600160601b61439c565b95945050505050565b6000836001600160a01b0316856001600160a01b03161115614b07579293925b7bffffffffffffffffffffffffffffffff000000000000000000000000606084901b166001600160a01b038686038116908716614b4357600080fd5b83614b7357866001600160a01b0316614b668383896001600160a01b0316613950565b81614b6d57fe5b04614b99565b614b99614b8a8383896001600160a01b031661439c565b886001600160a01b03166153a6565b979650505050505050565b600080856001600160a01b031611614bbb57600080fd5b6000846001600160801b031611614bd157600080fd5b81614be357614ab685858560016153b1565b614ade8585856001615492565b600080856001600160a01b031611614c0757600080fd5b6000846001600160801b031611614c1d57600080fd5b81614c2f57614ab68585856000615492565b614ade85858560006153b1565b614c4461583c565b600085600001518503905060405180608001604052808663ffffffff1681526020018263ffffffff168660020b0288602001510160060b81526020016000856001600160801b031611614c98576001614c9a565b845b6001600160801b031673ffffffff00000000000000000000000000000000608085901b1681614cc557fe5b048860400151016001600160a01b0316815260200160011515815250915050949350505050565b614cf461583c565b614cfc61583c565b888561ffff1661ffff8110614d0d57fe5b60408051608081018252919092015463ffffffff81168083526401000000008204600690810b810b900b6020840152600160581b82046001600160a01b031693830193909352600160f81b900460ff16151560608201529250614d7290899089615587565b15614daa578663ffffffff16826000015163ffffffff161415614d9457613bd8565b81614da183898988614c3c565b91509150613bd8565b888361ffff168660010161ffff1681614dbf57fe5b0661ffff1661ffff8110614dcf57fe5b60408051608081018252929091015463ffffffff811683526401000000008104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b90910416151560608201819052909250614e8657604080516080810182528a5463ffffffff811682526401000000008104600690810b810b900b6020830152600160581b81046001600160a01b031692820192909252600160f81b90910460ff161515606082015291505b614e9588836000015189615587565b614ecc576040805162461bcd60e51b815260206004820152600360248201526213d31160ea1b604482015290519081900360640190fd5b614ed9898989888761564a565b9150915097509795505050505050565b60028a810b900b600090815260208c90526040812080546001600160801b031682614f14828d613cb7565b9050846001600160801b0316816001600160801b03161115614f62576040805162461bcd60e51b81526020600482015260026024820152614c4f60f01b604482015290519081900360640190fd5b6001600160801b038281161590821615811415945015615038578c60020b8e60020b1361500857600183018b9055600283018a90556003830180547fffffffffff0000000000000000000000000000000000000000ffffffffffffff166701000000000000006001600160a01b038c16021766ffffffffffffff191666ffffffffffffff60068b900b161763ffffffff60d81b1916600160d81b63ffffffff8a16021790555b6003830180547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160f81b1790555b82546001600160801b0319166001600160801b0382161783558561508157825461507c9061507790600160801b9004600f90810b810b908f900b613a3b565b612eae565b6150a2565b82546150a29061507790600160801b9004600f90810b810b908f900b613a25565b8354600f9190910b6001600160801b03908116600160801b0291161790925550909c9b505050505050505050505050565b8060020b8260020b816150e257fe5b0760020b156150f057600080fd5b60008061510b8360020b8560020b8161510557fe5b056148d2565b600191820b820b60009081526020979097526040909620805460ff9097169190911b90951890945550505050565b600285810b80820b60009081526020899052604080822088850b850b83529082209193849391929184918291908a900b1261517f57505060018201546002830154615192565b8360010154880391508360020154870390505b6000808b60020b8b60020b12156151b4575050600183015460028401546151c7565b84600101548a0391508460020154890390505b92909803979097039b96909503949094039850939650505050505050565b6040805160a08101825285546001600160801b0390811682526001870154602083015260028701549282019290925260038601548083166060830152600160801b900490911660808201526000600f85900b6152845781516001600160801b031661527c576040805162461bcd60e51b815260206004820152600260248201526104e560f41b604482015290519081900360640190fd5b508051615293565b81516152909086613cb7565b90505b60006152b78360200151860384600001516001600160801b0316600160801b613950565b905060006152dd8460400151860385600001516001600160801b0316600160801b613950565b905086600f0b6000146153045787546001600160801b0319166001600160801b0384161788555b60018801869055600288018590556001600160801b03821615158061533257506000816001600160801b0316115b15615370576003880180546001600160801b031981166001600160801b039182168501821617808216600160801b9182900483168501909216021790555b5050505050505050565b600290810b810b6000908152602092909252604082208281556001810183905590810182905560030155565b808204910615150190565b600081156154245760006001600160a01b038411156153e7576153e284600160601b876001600160801b0316613950565b6153ff565b6001600160801b038516606085901b816153fd57fe5b045b905061541c6154176001600160a01b038816836132d0565b6157ea565b91505061489b565b60006001600160a01b038411156154525761544d84600160601b876001600160801b031661439c565b615469565b615469606085901b6001600160801b0387166153a6565b905080866001600160a01b03161161548057600080fd5b6001600160a01b03861603905061489b565b6000826154a057508361489b565b7bffffffffffffffffffffffffffffffff000000000000000000000000606085901b168215615540576001600160a01b038616848102908582816154e057fe5b0414156155115781810182811061550f5761550583896001600160a01b03168361439c565b935050505061489b565b505b61553782615532878a6001600160a01b0316868161552b57fe5b04906132d0565b6153a6565b9250505061489b565b6001600160a01b0386168481029085828161555757fe5b0414801561556457508082115b61556d57600080fd5b808203615505615417846001600160a01b038b168461439c565b60008363ffffffff168363ffffffff16111580156155b157508363ffffffff168263ffffffff1611155b156155cd578163ffffffff168363ffffffff1611159050612ea7565b60008463ffffffff168463ffffffff16116155f5578363ffffffff16640100000000016155fd565b8363ffffffff165b64ffffffffff16905060008563ffffffff168463ffffffff161161562e578363ffffffff1664010000000001615636565b8363ffffffff165b64ffffffffff169091111595945050505050565b61565261583c565b61565a61583c565b60008361ffff168560010161ffff168161567057fe5b0661ffff169050600060018561ffff16830103905060005b506002818301048961ffff8716828161569d57fe5b0661ffff81106156a957fe5b60408051608081018252929091015463ffffffff811683526401000000008104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b9091041615156060820181905290955061571457806001019250615688565b898661ffff16826001018161572557fe5b0661ffff811061573157fe5b60408051608081018252929091015463ffffffff811683526401000000008104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b9091041615156060820152855190945060009061579c908b908b615587565b90508080156157b557506157b58a8a8760000151615587565b156157c057506157dd565b806157d0576001820392506157d7565b8160010193505b50615688565b5050509550959350505050565b806001600160a01b0381168114612dcc57600080fd5b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6040805160808101825260008082526020820181905291810182905260608101919091529056fea164736f6c6343000706000aa164736f6c6343000706000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
