@@ -0,0 +1,376 @@
1+[38;2;117;113;94m//[0m[38;2;117;113;94m SPDX-License-Identifier: MIT[0m
2+
3+[38;2;249;38;114mpragma[0m[38;2;248;248;242m [0m[38;2;249;38;114msolidity[0m[38;2;248;248;242m [0m[38;2;249;38;114m^[0m[38;2;190;132;255m0[0m[38;2;190;132;255m.8.0[0m[38;2;248;248;242m;[0m
4+
5+[38;2;249;38;114mimport[0m[38;2;248;248;242m [0m[38;2;230;219;116m"[0m[38;2;230;219;116m.[0m[38;2;230;219;116m/[0m[38;2;230;219;116mI[0m[38;2;230;219;116mE[0m[38;2;230;219;116mR[0m[38;2;230;219;116mC[0m[38;2;230;219;116m7[0m[38;2;230;219;116m2[0m[38;2;230;219;116m1[0m[38;2;230;219;116m.[0m[38;2;230;219;116ms[0m[38;2;230;219;116mo[0m[38;2;230;219;116ml[0m[38;2;230;219;116m"[0m[38;2;248;248;242m;[0m
6+[38;2;249;38;114mimport[0m[38;2;248;248;242m [0m[38;2;230;219;116m"[0m[38;2;230;219;116m.[0m[38;2;230;219;116m/[0m[38;2;230;219;116mI[0m[38;2;230;219;116mE[0m[38;2;230;219;116mR[0m[38;2;230;219;116mC[0m[38;2;230;219;116m7[0m[38;2;230;219;116m2[0m[38;2;230;219;116m1[0m[38;2;230;219;116mR[0m[38;2;230;219;116me[0m[38;2;230;219;116mc[0m[38;2;230;219;116me[0m[38;2;230;219;116mi[0m[38;2;230;219;116mv[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;230;219;116m.[0m[38;2;230;219;116ms[0m[38;2;230;219;116mo[0m[38;2;230;219;116ml[0m[38;2;230;219;116m"[0m[38;2;248;248;242m;[0m
7+[38;2;249;38;114mimport[0m[38;2;248;248;242m [0m[38;2;230;219;116m"[0m[38;2;230;219;116m.[0m[38;2;230;219;116m/[0m[38;2;230;219;116me[0m[38;2;230;219;116mx[0m[38;2;230;219;116mt[0m[38;2;230;219;116me[0m[38;2;230;219;116mn[0m[38;2;230;219;116ms[0m[38;2;230;219;116mi[0m[38;2;230;219;116mo[0m[38;2;230;219;116mn[0m[38;2;230;219;116ms[0m[38;2;230;219;116m/[0m[38;2;230;219;116mI[0m[38;2;230;219;116mE[0m[38;2;230;219;116mR[0m[38;2;230;219;116mC[0m[38;2;230;219;116m7[0m[38;2;230;219;116m2[0m[38;2;230;219;116m1[0m[38;2;230;219;116mM[0m[38;2;230;219;116me[0m[38;2;230;219;116mt[0m[38;2;230;219;116ma[0m[38;2;230;219;116md[0m[38;2;230;219;116ma[0m[38;2;230;219;116mt[0m[38;2;230;219;116ma[0m[38;2;230;219;116m.[0m[38;2;230;219;116ms[0m[38;2;230;219;116mo[0m[38;2;230;219;116ml[0m[38;2;230;219;116m"[0m[38;2;248;248;242m;[0m
8+[38;2;249;38;114mimport[0m[38;2;248;248;242m [0m[38;2;230;219;116m"[0m[38;2;230;219;116m.[0m[38;2;230;219;116m.[0m[38;2;230;219;116m/[0m[38;2;230;219;116m.[0m[38;2;230;219;116m.[0m[38;2;230;219;116m/[0m[38;2;230;219;116mu[0m[38;2;230;219;116mt[0m[38;2;230;219;116mi[0m[38;2;230;219;116ml[0m[38;2;230;219;116ms[0m[38;2;230;219;116m/[0m[38;2;230;219;116mA[0m[38;2;230;219;116md[0m[38;2;230;219;116md[0m[38;2;230;219;116mr[0m[38;2;230;219;116me[0m[38;2;230;219;116ms[0m[38;2;230;219;116ms[0m[38;2;230;219;116m.[0m[38;2;230;219;116ms[0m[38;2;230;219;116mo[0m[38;2;230;219;116ml[0m[38;2;230;219;116m"[0m[38;2;248;248;242m;[0m
9+[38;2;249;38;114mimport[0m[38;2;248;248;242m [0m[38;2;230;219;116m"[0m[38;2;230;219;116m.[0m[38;2;230;219;116m.[0m[38;2;230;219;116m/[0m[38;2;230;219;116m.[0m[38;2;230;219;116m.[0m[38;2;230;219;116m/[0m[38;2;230;219;116mu[0m[38;2;230;219;116mt[0m[38;2;230;219;116mi[0m[38;2;230;219;116ml[0m[38;2;230;219;116ms[0m[38;2;230;219;116m/[0m[38;2;230;219;116mC[0m[38;2;230;219;116mo[0m[38;2;230;219;116mn[0m[38;2;230;219;116mt[0m[38;2;230;219;116me[0m[38;2;230;219;116mx[0m[38;2;230;219;116mt[0m[38;2;230;219;116m.[0m[38;2;230;219;116ms[0m[38;2;230;219;116mo[0m[38;2;230;219;116ml[0m[38;2;230;219;116m"[0m[38;2;248;248;242m;[0m
10+[38;2;249;38;114mimport[0m[38;2;248;248;242m [0m[38;2;230;219;116m"[0m[38;2;230;219;116m.[0m[38;2;230;219;116m.[0m[38;2;230;219;116m/[0m[38;2;230;219;116m.[0m[38;2;230;219;116m.[0m[38;2;230;219;116m/[0m[38;2;230;219;116mu[0m[38;2;230;219;116mt[0m[38;2;230;219;116mi[0m[38;2;230;219;116ml[0m[38;2;230;219;116ms[0m[38;2;230;219;116m/[0m[38;2;230;219;116mS[0m[38;2;230;219;116mt[0m[38;2;230;219;116mr[0m[38;2;230;219;116mi[0m[38;2;230;219;116mn[0m[38;2;230;219;116mg[0m[38;2;230;219;116ms[0m[38;2;230;219;116m.[0m[38;2;230;219;116ms[0m[38;2;230;219;116mo[0m[38;2;230;219;116ml[0m[38;2;230;219;116m"[0m[38;2;248;248;242m;[0m
11+[38;2;249;38;114mimport[0m[38;2;248;248;242m [0m[38;2;230;219;116m"[0m[38;2;230;219;116m.[0m[38;2;230;219;116m.[0m[38;2;230;219;116m/[0m[38;2;230;219;116m.[0m[38;2;230;219;116m.[0m[38;2;230;219;116m/[0m[38;2;230;219;116mu[0m[38;2;230;219;116mt[0m[38;2;230;219;116mi[0m[38;2;230;219;116ml[0m[38;2;230;219;116ms[0m[38;2;230;219;116m/[0m[38;2;230;219;116mi[0m[38;2;230;219;116mn[0m[38;2;230;219;116mt[0m[38;2;230;219;116mr[0m[38;2;230;219;116mo[0m[38;2;230;219;116ms[0m[38;2;230;219;116mp[0m[38;2;230;219;116me[0m[38;2;230;219;116mc[0m[38;2;230;219;116mt[0m[38;2;230;219;116mi[0m[38;2;230;219;116mo[0m[38;2;230;219;116mn[0m[38;2;230;219;116m/[0m[38;2;230;219;116mE[0m[38;2;230;219;116mR[0m[38;2;230;219;116mC[0m[38;2;230;219;116m1[0m[38;2;230;219;116m6[0m[38;2;230;219;116m5[0m[38;2;230;219;116m.[0m[38;2;230;219;116ms[0m[38;2;230;219;116mo[0m[38;2;230;219;116ml[0m[38;2;230;219;116m"[0m[38;2;248;248;242m;[0m
12+
13+[38;2;117;113;94m/**[0m
14+[38;2;117;113;94m * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including[0m
15+[38;2;117;113;94m * the Metadata extension, but not including the Enumerable extension, which is available separately as[0m
16+[38;2;117;113;94m * {ERC721Enumerable}.[0m
17+[38;2;117;113;94m [0m[38;2;117;113;94m*/[0m
18+[38;2;249;38;114mcontract[0m[38;2;248;248;242m [0m[4;38;2;102;217;239mERC721[0m[38;2;248;248;242m [0m[38;2;249;38;114mis[0m[38;2;248;248;242m [0m[3;38;2;166;226;46mContext[0m[38;2;248;248;242m,[0m[38;2;248;248;242m [0m[3;38;2;166;226;46mERC165[0m[38;2;248;248;242m,[0m[38;2;248;248;242m [0m[3;38;2;166;226;46mIERC721[0m[38;2;248;248;242m,[0m[38;2;248;248;242m [0m[3;38;2;166;226;46mIERC721Metadata[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
19+[38;2;248;248;242m [0m[38;2;249;38;114musing[0m[38;2;248;248;242m Address [0m[38;2;249;38;114mfor[0m[38;2;248;248;242m [0m[38;2;190;132;255maddress[0m[38;2;248;248;242m;[0m
20+[38;2;248;248;242m [0m[38;2;249;38;114musing[0m[38;2;248;248;242m Strings [0m[38;2;249;38;114mfor[0m[38;2;248;248;242m [0m[38;2;190;132;255muint256[0m[38;2;248;248;242m;[0m
21+
22+[38;2;248;248;242m [0m[38;2;117;113;94m//[0m[38;2;117;113;94m Token name[0m
23+[38;2;248;248;242m [0m[38;2;190;132;255mstring[0m[38;2;248;248;242m [0m[38;2;249;38;114mprivate [0m[38;2;248;248;242m_name[0m[38;2;248;248;242m;[0m
24+
25+[38;2;248;248;242m [0m[38;2;117;113;94m//[0m[38;2;117;113;94m Token symbol[0m
26+[38;2;248;248;242m [0m[38;2;190;132;255mstring[0m[38;2;248;248;242m [0m[38;2;249;38;114mprivate [0m[38;2;248;248;242m_symbol[0m[38;2;248;248;242m;[0m
27+
28+[38;2;248;248;242m [0m[38;2;117;113;94m//[0m[38;2;117;113;94m Mapping from token ID to owner address[0m
29+[38;2;248;248;242m [0m[3;38;2;102;217;239mmapping[0m[38;2;248;248;242m [0m[38;2;248;248;242m([0m[38;2;190;132;255muint256[0m[38;2;248;248;242m [0m[38;2;249;38;114m=>[0m[38;2;248;248;242m [0m[38;2;190;132;255maddress[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114mprivate[0m[38;2;248;248;242m _owners;[0m
30+
31+[38;2;248;248;242m [0m[38;2;117;113;94m//[0m[38;2;117;113;94m Mapping owner address to token count[0m
32+[38;2;248;248;242m [0m[3;38;2;102;217;239mmapping[0m[38;2;248;248;242m [0m[38;2;248;248;242m([0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[38;2;249;38;114m=>[0m[38;2;248;248;242m [0m[38;2;190;132;255muint256[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114mprivate[0m[38;2;248;248;242m _balances;[0m
33+
34+[38;2;248;248;242m [0m[38;2;117;113;94m//[0m[38;2;117;113;94m Mapping from token ID to approved address[0m
35+[38;2;248;248;242m [0m[3;38;2;102;217;239mmapping[0m[38;2;248;248;242m [0m[38;2;248;248;242m([0m[38;2;190;132;255muint256[0m[38;2;248;248;242m [0m[38;2;249;38;114m=>[0m[38;2;248;248;242m [0m[38;2;190;132;255maddress[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114mprivate[0m[38;2;248;248;242m _tokenApprovals;[0m
36+
37+[38;2;248;248;242m [0m[38;2;117;113;94m//[0m[38;2;117;113;94m Mapping from owner to operator approvals[0m
38+[38;2;248;248;242m [0m[3;38;2;102;217;239mmapping[0m[38;2;248;248;242m [0m[38;2;248;248;242m([0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[38;2;249;38;114m=>[0m[38;2;248;248;242m [0m[3;38;2;102;217;239mmapping[0m[38;2;248;248;242m [0m[38;2;248;248;242m([0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[38;2;249;38;114m=>[0m[38;2;248;248;242m [0m[38;2;190;132;255mbool[0m[38;2;248;248;242m)[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114mprivate[0m[38;2;248;248;242m _operatorApprovals;[0m
39+
40+[38;2;248;248;242m [0m[38;2;117;113;94m/**[0m
41+[38;2;117;113;94m * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.[0m
42+[38;2;117;113;94m [0m[38;2;117;113;94m*/[0m
43+[38;2;248;248;242m [0m[38;2;166;226;46mconstructor[0m[38;2;248;248;242m [0m[38;2;248;248;242m([0m[38;2;190;132;255mstring[0m[38;2;248;248;242m [0m[38;2;249;38;114mmemory[0m[3;38;2;253;151;31m name_[0m[38;2;248;248;242m, [0m[38;2;190;132;255mstring[0m[38;2;248;248;242m [0m[38;2;249;38;114mmemory[0m[3;38;2;253;151;31m symbol_[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
44+[38;2;248;248;242m [0m[38;2;248;248;242m_name[0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m name_;[0m
45+[38;2;248;248;242m [0m[38;2;248;248;242m_symbol[0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m symbol_;[0m
46+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
47+
48+[38;2;248;248;242m [0m[38;2;117;113;94m/**[0m
49+[38;2;117;113;94m * @dev See {IERC165-supportsInterface}.[0m
50+[38;2;117;113;94m [0m[38;2;117;113;94m*/[0m
51+[38;2;248;248;242m [0m[3;38;2;102;217;239mfunction[0m[38;2;248;248;242m [0m[38;2;166;226;46msupportsInterface[0m[38;2;248;248;242m([0m[38;2;190;132;255mbytes4[0m[38;2;248;248;242m [0m[3;38;2;253;151;31minterfaceId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114mpublic[0m[38;2;248;248;242m [0m[38;2;249;38;114mview[0m[38;2;248;248;242m [0m[38;2;249;38;114mvirtual[0m[38;2;248;248;242m [0m[38;2;249;38;114moverride[0m[38;2;248;248;242m(ERC165, IERC165) [0m[38;2;249;38;114mreturns[0m[38;2;248;248;242m [0m[38;2;248;248;242m([0m[38;2;190;132;255mbool[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
52+[38;2;248;248;242m [0m[38;2;249;38;114mreturn[0m[38;2;248;248;242m interfaceId [0m[38;2;249;38;114m==[0m[38;2;248;248;242m [0m[38;2;102;217;239mtype[0m[38;2;248;248;242m([0m[38;2;248;248;242mIERC721[0m[38;2;248;248;242m)[0m[38;2;248;248;242m.interfaceId[0m
53+[38;2;248;248;242m [0m[38;2;249;38;114m||[0m[38;2;248;248;242m interfaceId [0m[38;2;249;38;114m==[0m[38;2;248;248;242m [0m[38;2;102;217;239mtype[0m[38;2;248;248;242m([0m[38;2;248;248;242mIERC721Metadata[0m[38;2;248;248;242m)[0m[38;2;248;248;242m.interfaceId[0m
54+[38;2;248;248;242m [0m[38;2;249;38;114m||[0m[38;2;248;248;242m [0m[38;2;249;38;114msuper[0m[38;2;248;248;242m.[0m[38;2;102;217;239msupportsInterface[0m[38;2;248;248;242m([0m[38;2;248;248;242minterfaceId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
55+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
56+
57+[38;2;248;248;242m [0m[38;2;117;113;94m/**[0m
58+[38;2;117;113;94m * @dev See {IERC721-balanceOf}.[0m
59+[38;2;117;113;94m [0m[38;2;117;113;94m*/[0m
60+[38;2;248;248;242m [0m[3;38;2;102;217;239mfunction[0m[38;2;248;248;242m [0m[38;2;166;226;46mbalanceOf[0m[38;2;248;248;242m([0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mowner[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114mpublic[0m[38;2;248;248;242m [0m[38;2;249;38;114mview[0m[38;2;248;248;242m [0m[38;2;249;38;114mvirtual[0m[38;2;248;248;242m [0m[38;2;249;38;114moverride[0m[38;2;248;248;242m [0m[38;2;249;38;114mreturns[0m[38;2;248;248;242m [0m[38;2;248;248;242m([0m[38;2;190;132;255muint256[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
61+[38;2;248;248;242m [0m[38;2;249;38;114mrequire[0m[38;2;248;248;242m(owner [0m[38;2;249;38;114m!=[0m[38;2;248;248;242m [0m[38;2;190;132;255maddress[0m[38;2;248;248;242m([0m[38;2;190;132;255m0[0m[38;2;248;248;242m)[0m[38;2;248;248;242m, [0m[38;2;230;219;116m"[0m[38;2;230;219;116mE[0m[38;2;230;219;116mR[0m[38;2;230;219;116mC[0m[38;2;230;219;116m7[0m[38;2;230;219;116m2[0m[38;2;230;219;116m1[0m[38;2;230;219;116m:[0m[38;2;248;248;242m [0m[38;2;230;219;116mb[0m[38;2;230;219;116ma[0m[38;2;230;219;116ml[0m[38;2;230;219;116ma[0m[38;2;230;219;116mn[0m[38;2;230;219;116mc[0m[38;2;230;219;116me[0m[38;2;248;248;242m [0m[38;2;230;219;116mq[0m[38;2;230;219;116mu[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;230;219;116my[0m[38;2;248;248;242m [0m[38;2;230;219;116mf[0m[38;2;230;219;116mo[0m[38;2;230;219;116mr[0m[38;2;248;248;242m [0m[38;2;230;219;116mt[0m[38;2;230;219;116mh[0m[38;2;230;219;116me[0m[38;2;248;248;242m [0m[38;2;230;219;116mz[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;230;219;116mo[0m[38;2;248;248;242m [0m[38;2;230;219;116ma[0m[38;2;230;219;116md[0m[38;2;230;219;116md[0m[38;2;230;219;116mr[0m[38;2;230;219;116me[0m[38;2;230;219;116ms[0m[38;2;230;219;116ms[0m[38;2;230;219;116m"[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
62+[38;2;248;248;242m [0m[38;2;249;38;114mreturn[0m[38;2;248;248;242m _balances[0m[38;2;248;248;242m[[0m[38;2;248;248;242mowner[0m[38;2;248;248;242m][0m[38;2;248;248;242m;[0m
63+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
64+
65+[38;2;248;248;242m [0m[38;2;117;113;94m/**[0m
66+[38;2;117;113;94m * @dev See {IERC721-ownerOf}.[0m
67+[38;2;117;113;94m [0m[38;2;117;113;94m*/[0m
68+[38;2;248;248;242m [0m[3;38;2;102;217;239mfunction[0m[38;2;248;248;242m [0m[38;2;166;226;46mownerOf[0m[38;2;248;248;242m([0m[38;2;190;132;255muint256[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mtokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114mpublic[0m[38;2;248;248;242m [0m[38;2;249;38;114mview[0m[38;2;248;248;242m [0m[38;2;249;38;114mvirtual[0m[38;2;248;248;242m [0m[38;2;249;38;114moverride[0m[38;2;248;248;242m [0m[38;2;249;38;114mreturns[0m[38;2;248;248;242m [0m[38;2;248;248;242m([0m[38;2;190;132;255maddress[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
69+[38;2;248;248;242m [0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[38;2;248;248;242mowner[0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m _owners[0m[38;2;248;248;242m[[0m[38;2;248;248;242mtokenId[0m[38;2;248;248;242m][0m[38;2;248;248;242m;[0m
70+[38;2;248;248;242m [0m[38;2;249;38;114mrequire[0m[38;2;248;248;242m(owner [0m[38;2;249;38;114m!=[0m[38;2;248;248;242m [0m[38;2;190;132;255maddress[0m[38;2;248;248;242m([0m[38;2;190;132;255m0[0m[38;2;248;248;242m)[0m[38;2;248;248;242m, [0m[38;2;230;219;116m"[0m[38;2;230;219;116mE[0m[38;2;230;219;116mR[0m[38;2;230;219;116mC[0m[38;2;230;219;116m7[0m[38;2;230;219;116m2[0m[38;2;230;219;116m1[0m[38;2;230;219;116m:[0m[38;2;248;248;242m [0m[38;2;230;219;116mo[0m[38;2;230;219;116mw[0m[38;2;230;219;116mn[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;248;248;242m [0m[38;2;230;219;116mq[0m[38;2;230;219;116mu[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;230;219;116my[0m[38;2;248;248;242m [0m[38;2;230;219;116mf[0m[38;2;230;219;116mo[0m[38;2;230;219;116mr[0m[38;2;248;248;242m [0m[38;2;230;219;116mn[0m[38;2;230;219;116mo[0m[38;2;230;219;116mn[0m[38;2;230;219;116me[0m[38;2;230;219;116mx[0m[38;2;230;219;116mi[0m[38;2;230;219;116ms[0m[38;2;230;219;116mt[0m[38;2;230;219;116me[0m[38;2;230;219;116mn[0m[38;2;230;219;116mt[0m[38;2;248;248;242m [0m[38;2;230;219;116mt[0m[38;2;230;219;116mo[0m[38;2;230;219;116mk[0m[38;2;230;219;116me[0m[38;2;230;219;116mn[0m[38;2;230;219;116m"[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
71+[38;2;248;248;242m [0m[38;2;249;38;114mreturn[0m[38;2;248;248;242m owner;[0m
72+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
73+
74+[38;2;248;248;242m [0m[38;2;117;113;94m/**[0m
75+[38;2;117;113;94m * @dev See {IERC721Metadata-name}.[0m
76+[38;2;117;113;94m [0m[38;2;117;113;94m*/[0m
77+[38;2;248;248;242m [0m[3;38;2;102;217;239mfunction[0m[38;2;248;248;242m [0m[38;2;166;226;46mname[0m[38;2;248;248;242m([0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114mpublic[0m[38;2;248;248;242m [0m[38;2;249;38;114mview[0m[38;2;248;248;242m [0m[38;2;249;38;114mvirtual[0m[38;2;248;248;242m [0m[38;2;249;38;114moverride[0m[38;2;248;248;242m [0m[38;2;249;38;114mreturns[0m[38;2;248;248;242m [0m[38;2;248;248;242m([0m[38;2;190;132;255mstring[0m[38;2;248;248;242m [0m[38;2;249;38;114mmemory[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
78+[38;2;248;248;242m [0m[38;2;249;38;114mreturn[0m[38;2;248;248;242m _name;[0m
79+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
80+
81+[38;2;248;248;242m [0m[38;2;117;113;94m/**[0m
82+[38;2;117;113;94m * @dev See {IERC721Metadata-symbol}.[0m
83+[38;2;117;113;94m [0m[38;2;117;113;94m*/[0m
84+[38;2;248;248;242m [0m[3;38;2;102;217;239mfunction[0m[38;2;248;248;242m [0m[38;2;166;226;46msymbol[0m[38;2;248;248;242m([0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114mpublic[0m[38;2;248;248;242m [0m[38;2;249;38;114mview[0m[38;2;248;248;242m [0m[38;2;249;38;114mvirtual[0m[38;2;248;248;242m [0m[38;2;249;38;114moverride[0m[38;2;248;248;242m [0m[38;2;249;38;114mreturns[0m[38;2;248;248;242m [0m[38;2;248;248;242m([0m[38;2;190;132;255mstring[0m[38;2;248;248;242m [0m[38;2;249;38;114mmemory[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
85+[38;2;248;248;242m [0m[38;2;249;38;114mreturn[0m[38;2;248;248;242m _symbol;[0m
86+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
87+
88+[38;2;248;248;242m [0m[38;2;117;113;94m/**[0m
89+[38;2;117;113;94m * @dev See {IERC721Metadata-tokenURI}.[0m
90+[38;2;117;113;94m [0m[38;2;117;113;94m*/[0m
91+[38;2;248;248;242m [0m[3;38;2;102;217;239mfunction[0m[38;2;248;248;242m [0m[38;2;166;226;46mtokenURI[0m[38;2;248;248;242m([0m[38;2;190;132;255muint256[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mtokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114mpublic[0m[38;2;248;248;242m [0m[38;2;249;38;114mview[0m[38;2;248;248;242m [0m[38;2;249;38;114mvirtual[0m[38;2;248;248;242m [0m[38;2;249;38;114moverride[0m[38;2;248;248;242m [0m[38;2;249;38;114mreturns[0m[38;2;248;248;242m [0m[38;2;248;248;242m([0m[38;2;190;132;255mstring[0m[38;2;248;248;242m [0m[38;2;249;38;114mmemory[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
92+[38;2;248;248;242m [0m[38;2;249;38;114mrequire[0m[38;2;248;248;242m([0m[38;2;102;217;239m_exists[0m[38;2;248;248;242m([0m[38;2;248;248;242mtokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m, [0m[38;2;230;219;116m"[0m[38;2;230;219;116mE[0m[38;2;230;219;116mR[0m[38;2;230;219;116mC[0m[38;2;230;219;116m7[0m[38;2;230;219;116m2[0m[38;2;230;219;116m1[0m[38;2;230;219;116mM[0m[38;2;230;219;116me[0m[38;2;230;219;116mt[0m[38;2;230;219;116ma[0m[38;2;230;219;116md[0m[38;2;230;219;116ma[0m[38;2;230;219;116mt[0m[38;2;230;219;116ma[0m[38;2;230;219;116m:[0m[38;2;248;248;242m [0m[38;2;230;219;116mU[0m[38;2;230;219;116mR[0m[38;2;230;219;116mI[0m[38;2;248;248;242m [0m[38;2;230;219;116mq[0m[38;2;230;219;116mu[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;230;219;116my[0m[38;2;248;248;242m [0m[38;2;230;219;116mf[0m[38;2;230;219;116mo[0m[38;2;230;219;116mr[0m[38;2;248;248;242m [0m[38;2;230;219;116mn[0m[38;2;230;219;116mo[0m[38;2;230;219;116mn[0m[38;2;230;219;116me[0m[38;2;230;219;116mx[0m[38;2;230;219;116mi[0m[38;2;230;219;116ms[0m[38;2;230;219;116mt[0m[38;2;230;219;116me[0m[38;2;230;219;116mn[0m[38;2;230;219;116mt[0m[38;2;248;248;242m [0m[38;2;230;219;116mt[0m[38;2;230;219;116mo[0m[38;2;230;219;116mk[0m[38;2;230;219;116me[0m[38;2;230;219;116mn[0m[38;2;230;219;116m"[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
93+
94+[38;2;248;248;242m [0m[38;2;190;132;255mstring[0m[38;2;248;248;242m [0m[38;2;249;38;114mmemory [0m[38;2;248;248;242mbaseURI[0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;102;217;239m_baseURI[0m[38;2;248;248;242m([0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
95+[38;2;248;248;242m [0m[38;2;249;38;114mreturn[0m[38;2;248;248;242m [0m[38;2;190;132;255mbytes[0m[38;2;248;248;242m([0m[38;2;248;248;242mbaseURI[0m[38;2;248;248;242m)[0m[38;2;248;248;242m.[0m[3;38;2;166;226;46mlength[0m[38;2;248;248;242m [0m[38;2;249;38;114m>[0m[38;2;248;248;242m [0m[38;2;190;132;255m0[0m
96+[38;2;248;248;242m [0m[38;2;249;38;114m?[0m[38;2;248;248;242m [0m[38;2;190;132;255mstring[0m[38;2;248;248;242m([0m[38;2;102;217;239mabi.encodePacked[0m[38;2;248;248;242m(baseURI, [0m[38;2;248;248;242mtokenId[0m[38;2;248;248;242m.[0m[38;2;102;217;239mtoString[0m[38;2;248;248;242m([0m[38;2;248;248;242m)[0m[38;2;248;248;242m)[0m[38;2;248;248;242m)[0m
97+[38;2;248;248;242m [0m[38;2;249;38;114m:[0m[38;2;248;248;242m [0m[38;2;230;219;116m'[0m[38;2;230;219;116m'[0m[38;2;248;248;242m;[0m
98+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
99+
100+[38;2;248;248;242m [0m[38;2;117;113;94m/**[0m
101+[38;2;117;113;94m * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden[0m
102+[38;2;117;113;94m * in child contracts.[0m
103+[38;2;117;113;94m [0m[38;2;117;113;94m*/[0m
104+[38;2;248;248;242m [0m[3;38;2;102;217;239mfunction[0m[38;2;248;248;242m [0m[38;2;166;226;46m_baseURI[0m[38;2;248;248;242m([0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114minternal[0m[38;2;248;248;242m [0m[38;2;249;38;114mview[0m[38;2;248;248;242m [0m[38;2;249;38;114mvirtual[0m[38;2;248;248;242m [0m[38;2;249;38;114mreturns[0m[38;2;248;248;242m [0m[38;2;248;248;242m([0m[38;2;190;132;255mstring[0m[38;2;248;248;242m [0m[38;2;249;38;114mmemory[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
105+[38;2;248;248;242m [0m[38;2;249;38;114mreturn[0m[38;2;248;248;242m [0m[38;2;230;219;116m"[0m[38;2;230;219;116m"[0m[38;2;248;248;242m;[0m
106+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
107+
108+[38;2;248;248;242m [0m[38;2;117;113;94m/**[0m
109+[38;2;117;113;94m * @dev See {IERC721-approve}.[0m
110+[38;2;117;113;94m [0m[38;2;117;113;94m*/[0m
111+[38;2;248;248;242m [0m[3;38;2;102;217;239mfunction[0m[38;2;248;248;242m [0m[38;2;166;226;46mapprove[0m[38;2;248;248;242m([0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mto[0m[38;2;248;248;242m, [0m[38;2;190;132;255muint256[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mtokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114mpublic[0m[38;2;248;248;242m [0m[38;2;249;38;114mvirtual[0m[38;2;248;248;242m [0m[38;2;249;38;114moverride[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
112+[38;2;248;248;242m [0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[38;2;248;248;242mowner[0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;248;248;242mERC721[0m[38;2;248;248;242m.[0m[38;2;102;217;239mownerOf[0m[38;2;248;248;242m([0m[38;2;248;248;242mtokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
113+[38;2;248;248;242m [0m[38;2;249;38;114mrequire[0m[38;2;248;248;242m(to [0m[38;2;249;38;114m!=[0m[38;2;248;248;242m owner, [0m[38;2;230;219;116m"[0m[38;2;230;219;116mE[0m[38;2;230;219;116mR[0m[38;2;230;219;116mC[0m[38;2;230;219;116m7[0m[38;2;230;219;116m2[0m[38;2;230;219;116m1[0m[38;2;230;219;116m:[0m[38;2;248;248;242m [0m[38;2;230;219;116ma[0m[38;2;230;219;116mp[0m[38;2;230;219;116mp[0m[38;2;230;219;116mr[0m[38;2;230;219;116mo[0m[38;2;230;219;116mv[0m[38;2;230;219;116ma[0m[38;2;230;219;116ml[0m[38;2;248;248;242m [0m[38;2;230;219;116mt[0m[38;2;230;219;116mo[0m[38;2;248;248;242m [0m[38;2;230;219;116mc[0m[38;2;230;219;116mu[0m[38;2;230;219;116mr[0m[38;2;230;219;116mr[0m[38;2;230;219;116me[0m[38;2;230;219;116mn[0m[38;2;230;219;116mt[0m[38;2;248;248;242m [0m[38;2;230;219;116mo[0m[38;2;230;219;116mw[0m[38;2;230;219;116mn[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;230;219;116m"[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
114+
115+[38;2;248;248;242m [0m[38;2;249;38;114mrequire[0m[38;2;248;248;242m([0m[38;2;102;217;239m_msgSender[0m[38;2;248;248;242m([0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114m==[0m[38;2;248;248;242m owner [0m[38;2;249;38;114m||[0m[38;2;248;248;242m [0m[38;2;102;217;239misApprovedForAll[0m[38;2;248;248;242m([0m[38;2;248;248;242mowner, [0m[38;2;102;217;239m_msgSender[0m[38;2;248;248;242m([0m[38;2;248;248;242m)[0m[38;2;248;248;242m)[0m[38;2;248;248;242m,[0m
116+[38;2;248;248;242m [0m[38;2;230;219;116m"[0m[38;2;230;219;116mE[0m[38;2;230;219;116mR[0m[38;2;230;219;116mC[0m[38;2;230;219;116m7[0m[38;2;230;219;116m2[0m[38;2;230;219;116m1[0m[38;2;230;219;116m:[0m[38;2;248;248;242m [0m[38;2;230;219;116ma[0m[38;2;230;219;116mp[0m[38;2;230;219;116mp[0m[38;2;230;219;116mr[0m[38;2;230;219;116mo[0m[38;2;230;219;116mv[0m[38;2;230;219;116me[0m[38;2;248;248;242m [0m[38;2;230;219;116mc[0m[38;2;230;219;116ma[0m[38;2;230;219;116ml[0m[38;2;230;219;116ml[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;248;248;242m [0m[38;2;230;219;116mi[0m[38;2;230;219;116ms[0m[38;2;248;248;242m [0m[38;2;230;219;116mn[0m[38;2;230;219;116mo[0m[38;2;230;219;116mt[0m[38;2;248;248;242m [0m[38;2;230;219;116mo[0m[38;2;230;219;116mw[0m[38;2;230;219;116mn[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;248;248;242m [0m[38;2;230;219;116mn[0m[38;2;230;219;116mo[0m[38;2;230;219;116mr[0m[38;2;248;248;242m [0m[38;2;230;219;116ma[0m[38;2;230;219;116mp[0m[38;2;230;219;116mp[0m[38;2;230;219;116mr[0m[38;2;230;219;116mo[0m[38;2;230;219;116mv[0m[38;2;230;219;116me[0m[38;2;230;219;116md[0m[38;2;248;248;242m [0m[38;2;230;219;116mf[0m[38;2;230;219;116mo[0m[38;2;230;219;116mr[0m[38;2;248;248;242m [0m[38;2;230;219;116ma[0m[38;2;230;219;116ml[0m[38;2;230;219;116ml[0m[38;2;230;219;116m"[0m
117+[38;2;248;248;242m [0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
118+
119+[38;2;248;248;242m [0m[38;2;102;217;239m_approve[0m[38;2;248;248;242m([0m[38;2;248;248;242mto, tokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
120+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
121+
122+[38;2;248;248;242m [0m[38;2;117;113;94m/**[0m
123+[38;2;117;113;94m * @dev See {IERC721-getApproved}.[0m
124+[38;2;117;113;94m [0m[38;2;117;113;94m*/[0m
125+[38;2;248;248;242m [0m[3;38;2;102;217;239mfunction[0m[38;2;248;248;242m [0m[38;2;166;226;46mgetApproved[0m[38;2;248;248;242m([0m[38;2;190;132;255muint256[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mtokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114mpublic[0m[38;2;248;248;242m [0m[38;2;249;38;114mview[0m[38;2;248;248;242m [0m[38;2;249;38;114mvirtual[0m[38;2;248;248;242m [0m[38;2;249;38;114moverride[0m[38;2;248;248;242m [0m[38;2;249;38;114mreturns[0m[38;2;248;248;242m [0m[38;2;248;248;242m([0m[38;2;190;132;255maddress[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
126+[38;2;248;248;242m [0m[38;2;249;38;114mrequire[0m[38;2;248;248;242m([0m[38;2;102;217;239m_exists[0m[38;2;248;248;242m([0m[38;2;248;248;242mtokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m, [0m[38;2;230;219;116m"[0m[38;2;230;219;116mE[0m[38;2;230;219;116mR[0m[38;2;230;219;116mC[0m[38;2;230;219;116m7[0m[38;2;230;219;116m2[0m[38;2;230;219;116m1[0m[38;2;230;219;116m:[0m[38;2;248;248;242m [0m[38;2;230;219;116ma[0m[38;2;230;219;116mp[0m[38;2;230;219;116mp[0m[38;2;230;219;116mr[0m[38;2;230;219;116mo[0m[38;2;230;219;116mv[0m[38;2;230;219;116me[0m[38;2;230;219;116md[0m[38;2;248;248;242m [0m[38;2;230;219;116mq[0m[38;2;230;219;116mu[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;230;219;116my[0m[38;2;248;248;242m [0m[38;2;230;219;116mf[0m[38;2;230;219;116mo[0m[38;2;230;219;116mr[0m[38;2;248;248;242m [0m[38;2;230;219;116mn[0m[38;2;230;219;116mo[0m[38;2;230;219;116mn[0m[38;2;230;219;116me[0m[38;2;230;219;116mx[0m[38;2;230;219;116mi[0m[38;2;230;219;116ms[0m[38;2;230;219;116mt[0m[38;2;230;219;116me[0m[38;2;230;219;116mn[0m[38;2;230;219;116mt[0m[38;2;248;248;242m [0m[38;2;230;219;116mt[0m[38;2;230;219;116mo[0m[38;2;230;219;116mk[0m[38;2;230;219;116me[0m[38;2;230;219;116mn[0m[38;2;230;219;116m"[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
127+
128+[38;2;248;248;242m [0m[38;2;249;38;114mreturn[0m[38;2;248;248;242m _tokenApprovals[0m[38;2;248;248;242m[[0m[38;2;248;248;242mtokenId[0m[38;2;248;248;242m][0m[38;2;248;248;242m;[0m
129+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
130+
131+[38;2;248;248;242m [0m[38;2;117;113;94m/**[0m
132+[38;2;117;113;94m * @dev See {IERC721-setApprovalForAll}.[0m
133+[38;2;117;113;94m [0m[38;2;117;113;94m*/[0m
134+[38;2;248;248;242m [0m[3;38;2;102;217;239mfunction[0m[38;2;248;248;242m [0m[38;2;166;226;46msetApprovalForAll[0m[38;2;248;248;242m([0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[3;38;2;253;151;31moperator[0m[38;2;248;248;242m, [0m[38;2;190;132;255mbool[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mapproved[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114mpublic[0m[38;2;248;248;242m [0m[38;2;249;38;114mvirtual[0m[38;2;248;248;242m [0m[38;2;249;38;114moverride[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
135+[38;2;248;248;242m [0m[38;2;249;38;114mrequire[0m[38;2;248;248;242m(operator [0m[38;2;249;38;114m!=[0m[38;2;248;248;242m [0m[38;2;102;217;239m_msgSender[0m[38;2;248;248;242m([0m[38;2;248;248;242m)[0m[38;2;248;248;242m, [0m[38;2;230;219;116m"[0m[38;2;230;219;116mE[0m[38;2;230;219;116mR[0m[38;2;230;219;116mC[0m[38;2;230;219;116m7[0m[38;2;230;219;116m2[0m[38;2;230;219;116m1[0m[38;2;230;219;116m:[0m[38;2;248;248;242m [0m[38;2;230;219;116ma[0m[38;2;230;219;116mp[0m[38;2;230;219;116mp[0m[38;2;230;219;116mr[0m[38;2;230;219;116mo[0m[38;2;230;219;116mv[0m[38;2;230;219;116me[0m[38;2;248;248;242m [0m[38;2;230;219;116mt[0m[38;2;230;219;116mo[0m[38;2;248;248;242m [0m[38;2;230;219;116mc[0m[38;2;230;219;116ma[0m[38;2;230;219;116ml[0m[38;2;230;219;116ml[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;230;219;116m"[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
136+
137+[38;2;248;248;242m _operatorApprovals[0m[38;2;248;248;242m[[0m[38;2;102;217;239m_msgSender[0m[38;2;248;248;242m([0m[38;2;248;248;242m)[0m[38;2;248;248;242m][0m[38;2;248;248;242m[[0m[38;2;248;248;242moperator[0m[38;2;248;248;242m][0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m approved;[0m
138+[38;2;248;248;242m [0m[38;2;249;38;114memit[0m[38;2;248;248;242m [0m[38;2;102;217;239mApprovalForAll[0m[38;2;248;248;242m([0m[38;2;102;217;239m_msgSender[0m[38;2;248;248;242m([0m[38;2;248;248;242m)[0m[38;2;248;248;242m, operator, approved[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
139+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
140+
141+[38;2;248;248;242m [0m[38;2;117;113;94m/**[0m
142+[38;2;117;113;94m * @dev See {IERC721-isApprovedForAll}.[0m
143+[38;2;117;113;94m [0m[38;2;117;113;94m*/[0m
144+[38;2;248;248;242m [0m[3;38;2;102;217;239mfunction[0m[38;2;248;248;242m [0m[38;2;166;226;46misApprovedForAll[0m[38;2;248;248;242m([0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mowner[0m[38;2;248;248;242m, [0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[3;38;2;253;151;31moperator[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114mpublic[0m[38;2;248;248;242m [0m[38;2;249;38;114mview[0m[38;2;248;248;242m [0m[38;2;249;38;114mvirtual[0m[38;2;248;248;242m [0m[38;2;249;38;114moverride[0m[38;2;248;248;242m [0m[38;2;249;38;114mreturns[0m[38;2;248;248;242m [0m[38;2;248;248;242m([0m[38;2;190;132;255mbool[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
145+[38;2;248;248;242m [0m[38;2;249;38;114mreturn[0m[38;2;248;248;242m _operatorApprovals[0m[38;2;248;248;242m[[0m[38;2;248;248;242mowner[0m[38;2;248;248;242m][0m[38;2;248;248;242m[[0m[38;2;248;248;242moperator[0m[38;2;248;248;242m][0m[38;2;248;248;242m;[0m
146+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
147+
148+[38;2;248;248;242m [0m[38;2;117;113;94m/**[0m
149+[38;2;117;113;94m * @dev See {IERC721-transferFrom}.[0m
150+[38;2;117;113;94m [0m[38;2;117;113;94m*/[0m
151+[38;2;248;248;242m [0m[3;38;2;102;217;239mfunction[0m[38;2;248;248;242m [0m[38;2;166;226;46mtransferFrom[0m[38;2;248;248;242m([0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mfrom[0m[38;2;248;248;242m, [0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mto[0m[38;2;248;248;242m, [0m[38;2;190;132;255muint256[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mtokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114mpublic[0m[38;2;248;248;242m [0m[38;2;249;38;114mvirtual[0m[38;2;248;248;242m [0m[38;2;249;38;114moverride[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
152+[38;2;248;248;242m [0m[38;2;117;113;94m//[0m[38;2;117;113;94msolhint-disable-next-line max-line-length[0m
153+[38;2;248;248;242m [0m[38;2;249;38;114mrequire[0m[38;2;248;248;242m([0m[38;2;102;217;239m_isApprovedOrOwner[0m[38;2;248;248;242m([0m[38;2;102;217;239m_msgSender[0m[38;2;248;248;242m([0m[38;2;248;248;242m)[0m[38;2;248;248;242m, tokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m, [0m[38;2;230;219;116m"[0m[38;2;230;219;116mE[0m[38;2;230;219;116mR[0m[38;2;230;219;116mC[0m[38;2;230;219;116m7[0m[38;2;230;219;116m2[0m[38;2;230;219;116m1[0m[38;2;230;219;116m:[0m[38;2;248;248;242m [0m[38;2;230;219;116mt[0m[38;2;230;219;116mr[0m[38;2;230;219;116ma[0m[38;2;230;219;116mn[0m[38;2;230;219;116ms[0m[38;2;230;219;116mf[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;248;248;242m [0m[38;2;230;219;116mc[0m[38;2;230;219;116ma[0m[38;2;230;219;116ml[0m[38;2;230;219;116ml[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;248;248;242m [0m[38;2;230;219;116mi[0m[38;2;230;219;116ms[0m[38;2;248;248;242m [0m[38;2;230;219;116mn[0m[38;2;230;219;116mo[0m[38;2;230;219;116mt[0m[38;2;248;248;242m [0m[38;2;230;219;116mo[0m[38;2;230;219;116mw[0m[38;2;230;219;116mn[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;248;248;242m [0m[38;2;230;219;116mn[0m[38;2;230;219;116mo[0m[38;2;230;219;116mr[0m[38;2;248;248;242m [0m[38;2;230;219;116ma[0m[38;2;230;219;116mp[0m[38;2;230;219;116mp[0m[38;2;230;219;116mr[0m[38;2;230;219;116mo[0m[38;2;230;219;116mv[0m[38;2;230;219;116me[0m[38;2;230;219;116md[0m[38;2;230;219;116m"[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
154+
155+[38;2;248;248;242m [0m[38;2;102;217;239m_transfer[0m[38;2;248;248;242m([0m[38;2;248;248;242mfrom, to, tokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
156+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
157+
158+[38;2;248;248;242m [0m[38;2;117;113;94m/**[0m
159+[38;2;117;113;94m * @dev See {IERC721-safeTransferFrom}.[0m
160+[38;2;117;113;94m [0m[38;2;117;113;94m*/[0m
161+[38;2;248;248;242m [0m[3;38;2;102;217;239mfunction[0m[38;2;248;248;242m [0m[38;2;166;226;46msafeTransferFrom[0m[38;2;248;248;242m([0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mfrom[0m[38;2;248;248;242m, [0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mto[0m[38;2;248;248;242m, [0m[38;2;190;132;255muint256[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mtokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114mpublic[0m[38;2;248;248;242m [0m[38;2;249;38;114mvirtual[0m[38;2;248;248;242m [0m[38;2;249;38;114moverride[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
162+[38;2;248;248;242m [0m[38;2;102;217;239msafeTransferFrom[0m[38;2;248;248;242m([0m[38;2;248;248;242mfrom, to, tokenId, [0m[38;2;230;219;116m"[0m[38;2;230;219;116m"[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
163+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
164+
165+[38;2;248;248;242m [0m[38;2;117;113;94m/**[0m
166+[38;2;117;113;94m * @dev See {IERC721-safeTransferFrom}.[0m
167+[38;2;117;113;94m [0m[38;2;117;113;94m*/[0m
168+[38;2;248;248;242m [0m[3;38;2;102;217;239mfunction[0m[38;2;248;248;242m [0m[38;2;166;226;46msafeTransferFrom[0m[38;2;248;248;242m([0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mfrom[0m[38;2;248;248;242m, [0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mto[0m[38;2;248;248;242m, [0m[38;2;190;132;255muint256[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mtokenId[0m[38;2;248;248;242m, [0m[38;2;190;132;255mbytes[0m[38;2;248;248;242m [0m[38;2;249;38;114mmemory[0m[3;38;2;253;151;31m _data[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114mpublic[0m[38;2;248;248;242m [0m[38;2;249;38;114mvirtual[0m[38;2;248;248;242m [0m[38;2;249;38;114moverride[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
169+[38;2;248;248;242m [0m[38;2;249;38;114mrequire[0m[38;2;248;248;242m([0m[38;2;102;217;239m_isApprovedOrOwner[0m[38;2;248;248;242m([0m[38;2;102;217;239m_msgSender[0m[38;2;248;248;242m([0m[38;2;248;248;242m)[0m[38;2;248;248;242m, tokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m, [0m[38;2;230;219;116m"[0m[38;2;230;219;116mE[0m[38;2;230;219;116mR[0m[38;2;230;219;116mC[0m[38;2;230;219;116m7[0m[38;2;230;219;116m2[0m[38;2;230;219;116m1[0m[38;2;230;219;116m:[0m[38;2;248;248;242m [0m[38;2;230;219;116mt[0m[38;2;230;219;116mr[0m[38;2;230;219;116ma[0m[38;2;230;219;116mn[0m[38;2;230;219;116ms[0m[38;2;230;219;116mf[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;248;248;242m [0m[38;2;230;219;116mc[0m[38;2;230;219;116ma[0m[38;2;230;219;116ml[0m[38;2;230;219;116ml[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;248;248;242m [0m[38;2;230;219;116mi[0m[38;2;230;219;116ms[0m[38;2;248;248;242m [0m[38;2;230;219;116mn[0m[38;2;230;219;116mo[0m[38;2;230;219;116mt[0m[38;2;248;248;242m [0m[38;2;230;219;116mo[0m[38;2;230;219;116mw[0m[38;2;230;219;116mn[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;248;248;242m [0m[38;2;230;219;116mn[0m[38;2;230;219;116mo[0m[38;2;230;219;116mr[0m[38;2;248;248;242m [0m[38;2;230;219;116ma[0m[38;2;230;219;116mp[0m[38;2;230;219;116mp[0m[38;2;230;219;116mr[0m[38;2;230;219;116mo[0m[38;2;230;219;116mv[0m[38;2;230;219;116me[0m[38;2;230;219;116md[0m[38;2;230;219;116m"[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
170+[38;2;248;248;242m [0m[38;2;102;217;239m_safeTransfer[0m[38;2;248;248;242m([0m[38;2;248;248;242mfrom, to, tokenId, _data[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
171+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
172+
173+[38;2;248;248;242m [0m[38;2;117;113;94m/**[0m
174+[38;2;117;113;94m * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients[0m
175+[38;2;117;113;94m * are aware of the ERC721 protocol to prevent tokens from being forever locked.[0m
176+[38;2;117;113;94m *[0m
177+[38;2;117;113;94m * `_data` is additional data, it has no specified format and it is sent in call to `to`.[0m
178+[38;2;117;113;94m *[0m
179+[38;2;117;113;94m * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.[0m
180+[38;2;117;113;94m * implement alternative mechanisms to perform token transfer, such as signature-based.[0m
181+[38;2;117;113;94m *[0m
182+[38;2;117;113;94m * Requirements:[0m
183+[38;2;117;113;94m *[0m
184+[38;2;117;113;94m * - `from` cannot be the zero address.[0m
185+[38;2;117;113;94m * - `to` cannot be the zero address.[0m
186+[38;2;117;113;94m * - `tokenId` token must exist and be owned by `from`.[0m
187+[38;2;117;113;94m * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.[0m
188+[38;2;117;113;94m *[0m
189+[38;2;117;113;94m * Emits a {Transfer} event.[0m
190+[38;2;117;113;94m [0m[38;2;117;113;94m*/[0m
191+[38;2;248;248;242m [0m[3;38;2;102;217;239mfunction[0m[38;2;248;248;242m [0m[38;2;166;226;46m_safeTransfer[0m[38;2;248;248;242m([0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mfrom[0m[38;2;248;248;242m, [0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mto[0m[38;2;248;248;242m, [0m[38;2;190;132;255muint256[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mtokenId[0m[38;2;248;248;242m, [0m[38;2;190;132;255mbytes[0m[38;2;248;248;242m [0m[38;2;249;38;114mmemory[0m[3;38;2;253;151;31m _data[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114minternal[0m[38;2;248;248;242m [0m[38;2;249;38;114mvirtual[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
192+[38;2;248;248;242m [0m[38;2;102;217;239m_transfer[0m[38;2;248;248;242m([0m[38;2;248;248;242mfrom, to, tokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
193+[38;2;248;248;242m [0m[38;2;249;38;114mrequire[0m[38;2;248;248;242m([0m[38;2;102;217;239m_checkOnERC721Received[0m[38;2;248;248;242m([0m[38;2;248;248;242mfrom, to, tokenId, _data[0m[38;2;248;248;242m)[0m[38;2;248;248;242m, [0m[38;2;230;219;116m"[0m[38;2;230;219;116mE[0m[38;2;230;219;116mR[0m[38;2;230;219;116mC[0m[38;2;230;219;116m7[0m[38;2;230;219;116m2[0m[38;2;230;219;116m1[0m[38;2;230;219;116m:[0m[38;2;248;248;242m [0m[38;2;230;219;116mt[0m[38;2;230;219;116mr[0m[38;2;230;219;116ma[0m[38;2;230;219;116mn[0m[38;2;230;219;116ms[0m[38;2;230;219;116mf[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;248;248;242m [0m[38;2;230;219;116mt[0m[38;2;230;219;116mo[0m[38;2;248;248;242m [0m[38;2;230;219;116mn[0m[38;2;230;219;116mo[0m[38;2;230;219;116mn[0m[38;2;248;248;242m [0m[38;2;230;219;116mE[0m[38;2;230;219;116mR[0m[38;2;230;219;116mC[0m[38;2;230;219;116m7[0m[38;2;230;219;116m2[0m[38;2;230;219;116m1[0m[38;2;230;219;116mR[0m[38;2;230;219;116me[0m[38;2;230;219;116mc[0m[38;2;230;219;116me[0m[38;2;230;219;116mi[0m[38;2;230;219;116mv[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;248;248;242m [0m[38;2;230;219;116mi[0m[38;2;230;219;116mm[0m[38;2;230;219;116mp[0m[38;2;230;219;116ml[0m[38;2;230;219;116me[0m[38;2;230;219;116mm[0m[38;2;230;219;116me[0m[38;2;230;219;116mn[0m[38;2;230;219;116mt[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;230;219;116m"[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
194+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
195+
196+[38;2;248;248;242m [0m[38;2;117;113;94m/**[0m
197+[38;2;117;113;94m * @dev Returns whether `tokenId` exists.[0m
198+[38;2;117;113;94m *[0m
199+[38;2;117;113;94m * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.[0m
200+[38;2;117;113;94m *[0m
201+[38;2;117;113;94m * Tokens start existing when they are minted (`_mint`),[0m
202+[38;2;117;113;94m * and stop existing when they are burned (`_burn`).[0m
203+[38;2;117;113;94m [0m[38;2;117;113;94m*/[0m
204+[38;2;248;248;242m [0m[3;38;2;102;217;239mfunction[0m[38;2;248;248;242m [0m[38;2;166;226;46m_exists[0m[38;2;248;248;242m([0m[38;2;190;132;255muint256[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mtokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114minternal[0m[38;2;248;248;242m [0m[38;2;249;38;114mview[0m[38;2;248;248;242m [0m[38;2;249;38;114mvirtual[0m[38;2;248;248;242m [0m[38;2;249;38;114mreturns[0m[38;2;248;248;242m [0m[38;2;248;248;242m([0m[38;2;190;132;255mbool[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
205+[38;2;248;248;242m [0m[38;2;249;38;114mreturn[0m[38;2;248;248;242m _owners[0m[38;2;248;248;242m[[0m[38;2;248;248;242mtokenId[0m[38;2;248;248;242m][0m[38;2;248;248;242m [0m[38;2;249;38;114m!=[0m[38;2;248;248;242m [0m[38;2;190;132;255maddress[0m[38;2;248;248;242m([0m[38;2;190;132;255m0[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
206+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
207+
208+[38;2;248;248;242m [0m[38;2;117;113;94m/**[0m
209+[38;2;117;113;94m * @dev Returns whether `spender` is allowed to manage `tokenId`.[0m
210+[38;2;117;113;94m *[0m
211+[38;2;117;113;94m * Requirements:[0m
212+[38;2;117;113;94m *[0m
213+[38;2;117;113;94m * - `tokenId` must exist.[0m
214+[38;2;117;113;94m [0m[38;2;117;113;94m*/[0m
215+[38;2;248;248;242m [0m[3;38;2;102;217;239mfunction[0m[38;2;248;248;242m [0m[38;2;166;226;46m_isApprovedOrOwner[0m[38;2;248;248;242m([0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mspender[0m[38;2;248;248;242m, [0m[38;2;190;132;255muint256[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mtokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114minternal[0m[38;2;248;248;242m [0m[38;2;249;38;114mview[0m[38;2;248;248;242m [0m[38;2;249;38;114mvirtual[0m[38;2;248;248;242m [0m[38;2;249;38;114mreturns[0m[38;2;248;248;242m [0m[38;2;248;248;242m([0m[38;2;190;132;255mbool[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
216+[38;2;248;248;242m [0m[38;2;249;38;114mrequire[0m[38;2;248;248;242m([0m[38;2;102;217;239m_exists[0m[38;2;248;248;242m([0m[38;2;248;248;242mtokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m, [0m[38;2;230;219;116m"[0m[38;2;230;219;116mE[0m[38;2;230;219;116mR[0m[38;2;230;219;116mC[0m[38;2;230;219;116m7[0m[38;2;230;219;116m2[0m[38;2;230;219;116m1[0m[38;2;230;219;116m:[0m[38;2;248;248;242m [0m[38;2;230;219;116mo[0m[38;2;230;219;116mp[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;230;219;116ma[0m[38;2;230;219;116mt[0m[38;2;230;219;116mo[0m[38;2;230;219;116mr[0m[38;2;248;248;242m [0m[38;2;230;219;116mq[0m[38;2;230;219;116mu[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;230;219;116my[0m[38;2;248;248;242m [0m[38;2;230;219;116mf[0m[38;2;230;219;116mo[0m[38;2;230;219;116mr[0m[38;2;248;248;242m [0m[38;2;230;219;116mn[0m[38;2;230;219;116mo[0m[38;2;230;219;116mn[0m[38;2;230;219;116me[0m[38;2;230;219;116mx[0m[38;2;230;219;116mi[0m[38;2;230;219;116ms[0m[38;2;230;219;116mt[0m[38;2;230;219;116me[0m[38;2;230;219;116mn[0m[38;2;230;219;116mt[0m[38;2;248;248;242m [0m[38;2;230;219;116mt[0m[38;2;230;219;116mo[0m[38;2;230;219;116mk[0m[38;2;230;219;116me[0m[38;2;230;219;116mn[0m[38;2;230;219;116m"[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
217+[38;2;248;248;242m [0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[38;2;248;248;242mowner[0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;248;248;242mERC721[0m[38;2;248;248;242m.[0m[38;2;102;217;239mownerOf[0m[38;2;248;248;242m([0m[38;2;248;248;242mtokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
218+[38;2;248;248;242m [0m[38;2;249;38;114mreturn[0m[38;2;248;248;242m [0m[38;2;248;248;242m([0m[38;2;248;248;242mspender [0m[38;2;249;38;114m==[0m[38;2;248;248;242m owner [0m[38;2;249;38;114m||[0m[38;2;248;248;242m [0m[38;2;102;217;239mgetApproved[0m[38;2;248;248;242m([0m[38;2;248;248;242mtokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114m==[0m[38;2;248;248;242m spender [0m[38;2;249;38;114m||[0m[38;2;248;248;242m [0m[38;2;102;217;239misApprovedForAll[0m[38;2;248;248;242m([0m[38;2;248;248;242mowner, spender[0m[38;2;248;248;242m)[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
219+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
220+
221+[38;2;248;248;242m [0m[38;2;117;113;94m/**[0m
222+[38;2;117;113;94m * @dev Safely mints `tokenId` and transfers it to `to`.[0m
223+[38;2;117;113;94m *[0m
224+[38;2;117;113;94m * Requirements:[0m
225+[38;2;117;113;94m *[0m
226+[38;2;117;113;94m * - `tokenId` must not exist.[0m
227+[38;2;117;113;94m * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.[0m
228+[38;2;117;113;94m *[0m
229+[38;2;117;113;94m * Emits a {Transfer} event.[0m
230+[38;2;117;113;94m [0m[38;2;117;113;94m*/[0m
231+[38;2;248;248;242m [0m[3;38;2;102;217;239mfunction[0m[38;2;248;248;242m [0m[38;2;166;226;46m_safeMint[0m[38;2;248;248;242m([0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mto[0m[38;2;248;248;242m, [0m[38;2;190;132;255muint256[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mtokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114minternal[0m[38;2;248;248;242m [0m[38;2;249;38;114mvirtual[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
232+[38;2;248;248;242m [0m[38;2;102;217;239m_safeMint[0m[38;2;248;248;242m([0m[38;2;248;248;242mto, tokenId, [0m[38;2;230;219;116m"[0m[38;2;230;219;116m"[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
233+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
234+
235+[38;2;248;248;242m [0m[38;2;117;113;94m/**[0m
236+[38;2;117;113;94m * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is[0m
237+[38;2;117;113;94m * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.[0m
238+[38;2;117;113;94m [0m[38;2;117;113;94m*/[0m
239+[38;2;248;248;242m [0m[3;38;2;102;217;239mfunction[0m[38;2;248;248;242m [0m[38;2;166;226;46m_safeMint[0m[38;2;248;248;242m([0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mto[0m[38;2;248;248;242m, [0m[38;2;190;132;255muint256[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mtokenId[0m[38;2;248;248;242m, [0m[38;2;190;132;255mbytes[0m[38;2;248;248;242m [0m[38;2;249;38;114mmemory[0m[3;38;2;253;151;31m _data[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114minternal[0m[38;2;248;248;242m [0m[38;2;249;38;114mvirtual[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
240+[38;2;248;248;242m [0m[38;2;102;217;239m_mint[0m[38;2;248;248;242m([0m[38;2;248;248;242mto, tokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
241+[38;2;248;248;242m [0m[38;2;249;38;114mrequire[0m[38;2;248;248;242m([0m[38;2;102;217;239m_checkOnERC721Received[0m[38;2;248;248;242m([0m[38;2;190;132;255maddress[0m[38;2;248;248;242m([0m[38;2;190;132;255m0[0m[38;2;248;248;242m)[0m[38;2;248;248;242m, to, tokenId, _data[0m[38;2;248;248;242m)[0m[38;2;248;248;242m, [0m[38;2;230;219;116m"[0m[38;2;230;219;116mE[0m[38;2;230;219;116mR[0m[38;2;230;219;116mC[0m[38;2;230;219;116m7[0m[38;2;230;219;116m2[0m[38;2;230;219;116m1[0m[38;2;230;219;116m:[0m[38;2;248;248;242m [0m[38;2;230;219;116mt[0m[38;2;230;219;116mr[0m[38;2;230;219;116ma[0m[38;2;230;219;116mn[0m[38;2;230;219;116ms[0m[38;2;230;219;116mf[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;248;248;242m [0m[38;2;230;219;116mt[0m[38;2;230;219;116mo[0m[38;2;248;248;242m [0m[38;2;230;219;116mn[0m[38;2;230;219;116mo[0m[38;2;230;219;116mn[0m[38;2;248;248;242m [0m[38;2;230;219;116mE[0m[38;2;230;219;116mR[0m[38;2;230;219;116mC[0m[38;2;230;219;116m7[0m[38;2;230;219;116m2[0m[38;2;230;219;116m1[0m[38;2;230;219;116mR[0m[38;2;230;219;116me[0m[38;2;230;219;116mc[0m[38;2;230;219;116me[0m[38;2;230;219;116mi[0m[38;2;230;219;116mv[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;248;248;242m [0m[38;2;230;219;116mi[0m[38;2;230;219;116mm[0m[38;2;230;219;116mp[0m[38;2;230;219;116ml[0m[38;2;230;219;116me[0m[38;2;230;219;116mm[0m[38;2;230;219;116me[0m[38;2;230;219;116mn[0m[38;2;230;219;116mt[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;230;219;116m"[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
242+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
243+
244+[38;2;248;248;242m [0m[38;2;117;113;94m/**[0m
245+[38;2;117;113;94m * @dev Mints `tokenId` and transfers it to `to`.[0m
246+[38;2;117;113;94m *[0m
247+[38;2;117;113;94m * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible[0m
248+[38;2;117;113;94m *[0m
249+[38;2;117;113;94m * Requirements:[0m
250+[38;2;117;113;94m *[0m
251+[38;2;117;113;94m * - `tokenId` must not exist.[0m
252+[38;2;117;113;94m * - `to` cannot be the zero address.[0m
253+[38;2;117;113;94m *[0m
254+[38;2;117;113;94m * Emits a {Transfer} event.[0m
255+[38;2;117;113;94m [0m[38;2;117;113;94m*/[0m
256+[38;2;248;248;242m [0m[3;38;2;102;217;239mfunction[0m[38;2;248;248;242m [0m[38;2;166;226;46m_mint[0m[38;2;248;248;242m([0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mto[0m[38;2;248;248;242m, [0m[38;2;190;132;255muint256[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mtokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114minternal[0m[38;2;248;248;242m [0m[38;2;249;38;114mvirtual[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
257+[38;2;248;248;242m [0m[38;2;249;38;114mrequire[0m[38;2;248;248;242m(to [0m[38;2;249;38;114m!=[0m[38;2;248;248;242m [0m[38;2;190;132;255maddress[0m[38;2;248;248;242m([0m[38;2;190;132;255m0[0m[38;2;248;248;242m)[0m[38;2;248;248;242m, [0m[38;2;230;219;116m"[0m[38;2;230;219;116mE[0m[38;2;230;219;116mR[0m[38;2;230;219;116mC[0m[38;2;230;219;116m7[0m[38;2;230;219;116m2[0m[38;2;230;219;116m1[0m[38;2;230;219;116m:[0m[38;2;248;248;242m [0m[38;2;230;219;116mm[0m[38;2;230;219;116mi[0m[38;2;230;219;116mn[0m[38;2;230;219;116mt[0m[38;2;248;248;242m [0m[38;2;230;219;116mt[0m[38;2;230;219;116mo[0m[38;2;248;248;242m [0m[38;2;230;219;116mt[0m[38;2;230;219;116mh[0m[38;2;230;219;116me[0m[38;2;248;248;242m [0m[38;2;230;219;116mz[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;230;219;116mo[0m[38;2;248;248;242m [0m[38;2;230;219;116ma[0m[38;2;230;219;116md[0m[38;2;230;219;116md[0m[38;2;230;219;116mr[0m[38;2;230;219;116me[0m[38;2;230;219;116ms[0m[38;2;230;219;116ms[0m[38;2;230;219;116m"[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
258+[38;2;248;248;242m [0m[38;2;249;38;114mrequire[0m[38;2;248;248;242m([0m[38;2;249;38;114m![0m[38;2;102;217;239m_exists[0m[38;2;248;248;242m([0m[38;2;248;248;242mtokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m, [0m[38;2;230;219;116m"[0m[38;2;230;219;116mE[0m[38;2;230;219;116mR[0m[38;2;230;219;116mC[0m[38;2;230;219;116m7[0m[38;2;230;219;116m2[0m[38;2;230;219;116m1[0m[38;2;230;219;116m:[0m[38;2;248;248;242m [0m[38;2;230;219;116mt[0m[38;2;230;219;116mo[0m[38;2;230;219;116mk[0m[38;2;230;219;116me[0m[38;2;230;219;116mn[0m[38;2;248;248;242m [0m[38;2;230;219;116ma[0m[38;2;230;219;116ml[0m[38;2;230;219;116mr[0m[38;2;230;219;116me[0m[38;2;230;219;116ma[0m[38;2;230;219;116md[0m[38;2;230;219;116my[0m[38;2;248;248;242m [0m[38;2;230;219;116mm[0m[38;2;230;219;116mi[0m[38;2;230;219;116mn[0m[38;2;230;219;116mt[0m[38;2;230;219;116me[0m[38;2;230;219;116md[0m[38;2;230;219;116m"[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
259+
260+[38;2;248;248;242m [0m[38;2;102;217;239m_beforeTokenTransfer[0m[38;2;248;248;242m([0m[38;2;190;132;255maddress[0m[38;2;248;248;242m([0m[38;2;190;132;255m0[0m[38;2;248;248;242m)[0m[38;2;248;248;242m, to, tokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
261+
262+[38;2;248;248;242m _balances[0m[38;2;248;248;242m[[0m[38;2;248;248;242mto[0m[38;2;248;248;242m][0m[38;2;248;248;242m [0m[38;2;249;38;114m+[0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;190;132;255m1[0m[38;2;248;248;242m;[0m
263+[38;2;248;248;242m _owners[0m[38;2;248;248;242m[[0m[38;2;248;248;242mtokenId[0m[38;2;248;248;242m][0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m to;[0m
264+
265+[38;2;248;248;242m [0m[38;2;249;38;114memit[0m[38;2;248;248;242m [0m[38;2;102;217;239mTransfer[0m[38;2;248;248;242m([0m[38;2;190;132;255maddress[0m[38;2;248;248;242m([0m[38;2;190;132;255m0[0m[38;2;248;248;242m)[0m[38;2;248;248;242m, to, tokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
266+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
267+
268+[38;2;248;248;242m [0m[38;2;117;113;94m/**[0m
269+[38;2;117;113;94m * @dev Destroys `tokenId`.[0m
270+[38;2;117;113;94m * The approval is cleared when the token is burned.[0m
271+[38;2;117;113;94m *[0m
272+[38;2;117;113;94m * Requirements:[0m
273+[38;2;117;113;94m *[0m
274+[38;2;117;113;94m * - `tokenId` must exist.[0m
275+[38;2;117;113;94m *[0m
276+[38;2;117;113;94m * Emits a {Transfer} event.[0m
277+[38;2;117;113;94m [0m[38;2;117;113;94m*/[0m
278+[38;2;248;248;242m [0m[3;38;2;102;217;239mfunction[0m[38;2;248;248;242m [0m[38;2;166;226;46m_burn[0m[38;2;248;248;242m([0m[38;2;190;132;255muint256[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mtokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114minternal[0m[38;2;248;248;242m [0m[38;2;249;38;114mvirtual[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
279+[38;2;248;248;242m [0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[38;2;248;248;242mowner[0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;248;248;242mERC721[0m[38;2;248;248;242m.[0m[38;2;102;217;239mownerOf[0m[38;2;248;248;242m([0m[38;2;248;248;242mtokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
280+
281+[38;2;248;248;242m [0m[38;2;102;217;239m_beforeTokenTransfer[0m[38;2;248;248;242m([0m[38;2;248;248;242mowner, [0m[38;2;190;132;255maddress[0m[38;2;248;248;242m([0m[38;2;190;132;255m0[0m[38;2;248;248;242m)[0m[38;2;248;248;242m, tokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
282+
283+[38;2;248;248;242m [0m[38;2;117;113;94m//[0m[38;2;117;113;94m Clear approvals[0m
284+[38;2;248;248;242m [0m[38;2;102;217;239m_approve[0m[38;2;248;248;242m([0m[38;2;190;132;255maddress[0m[38;2;248;248;242m([0m[38;2;190;132;255m0[0m[38;2;248;248;242m)[0m[38;2;248;248;242m, tokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
285+
286+[38;2;248;248;242m _balances[0m[38;2;248;248;242m[[0m[38;2;248;248;242mowner[0m[38;2;248;248;242m][0m[38;2;248;248;242m [0m[38;2;249;38;114m-[0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;190;132;255m1[0m[38;2;248;248;242m;[0m
287+[38;2;248;248;242m [0m[38;2;249;38;114mdelete[0m[38;2;248;248;242m _owners[0m[38;2;248;248;242m[[0m[38;2;248;248;242mtokenId[0m[38;2;248;248;242m][0m[38;2;248;248;242m;[0m
288+
289+[38;2;248;248;242m [0m[38;2;249;38;114memit[0m[38;2;248;248;242m [0m[38;2;102;217;239mTransfer[0m[38;2;248;248;242m([0m[38;2;248;248;242mowner, [0m[38;2;190;132;255maddress[0m[38;2;248;248;242m([0m[38;2;190;132;255m0[0m[38;2;248;248;242m)[0m[38;2;248;248;242m, tokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
290+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
291+
292+[38;2;248;248;242m [0m[38;2;117;113;94m/**[0m
293+[38;2;117;113;94m * @dev Transfers `tokenId` from `from` to `to`.[0m
294+[38;2;117;113;94m * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.[0m
295+[38;2;117;113;94m *[0m
296+[38;2;117;113;94m * Requirements:[0m
297+[38;2;117;113;94m *[0m
298+[38;2;117;113;94m * - `to` cannot be the zero address.[0m
299+[38;2;117;113;94m * - `tokenId` token must be owned by `from`.[0m
300+[38;2;117;113;94m *[0m
301+[38;2;117;113;94m * Emits a {Transfer} event.[0m
302+[38;2;117;113;94m [0m[38;2;117;113;94m*/[0m
303+[38;2;248;248;242m [0m[3;38;2;102;217;239mfunction[0m[38;2;248;248;242m [0m[38;2;166;226;46m_transfer[0m[38;2;248;248;242m([0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mfrom[0m[38;2;248;248;242m, [0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mto[0m[38;2;248;248;242m, [0m[38;2;190;132;255muint256[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mtokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114minternal[0m[38;2;248;248;242m [0m[38;2;249;38;114mvirtual[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
304+[38;2;248;248;242m [0m[38;2;249;38;114mrequire[0m[38;2;248;248;242m([0m[38;2;248;248;242mERC721[0m[38;2;248;248;242m.[0m[38;2;102;217;239mownerOf[0m[38;2;248;248;242m([0m[38;2;248;248;242mtokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114m==[0m[38;2;248;248;242m from, [0m[38;2;230;219;116m"[0m[38;2;230;219;116mE[0m[38;2;230;219;116mR[0m[38;2;230;219;116mC[0m[38;2;230;219;116m7[0m[38;2;230;219;116m2[0m[38;2;230;219;116m1[0m[38;2;230;219;116m:[0m[38;2;248;248;242m [0m[38;2;230;219;116mt[0m[38;2;230;219;116mr[0m[38;2;230;219;116ma[0m[38;2;230;219;116mn[0m[38;2;230;219;116ms[0m[38;2;230;219;116mf[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;248;248;242m [0m[38;2;230;219;116mo[0m[38;2;230;219;116mf[0m[38;2;248;248;242m [0m[38;2;230;219;116mt[0m[38;2;230;219;116mo[0m[38;2;230;219;116mk[0m[38;2;230;219;116me[0m[38;2;230;219;116mn[0m[38;2;248;248;242m [0m[38;2;230;219;116mt[0m[38;2;230;219;116mh[0m[38;2;230;219;116ma[0m[38;2;230;219;116mt[0m[38;2;248;248;242m [0m[38;2;230;219;116mi[0m[38;2;230;219;116ms[0m[38;2;248;248;242m [0m[38;2;230;219;116mn[0m[38;2;230;219;116mo[0m[38;2;230;219;116mt[0m[38;2;248;248;242m [0m[38;2;230;219;116mo[0m[38;2;230;219;116mw[0m[38;2;230;219;116mn[0m[38;2;230;219;116m"[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
305+[38;2;248;248;242m [0m[38;2;249;38;114mrequire[0m[38;2;248;248;242m(to [0m[38;2;249;38;114m!=[0m[38;2;248;248;242m [0m[38;2;190;132;255maddress[0m[38;2;248;248;242m([0m[38;2;190;132;255m0[0m[38;2;248;248;242m)[0m[38;2;248;248;242m, [0m[38;2;230;219;116m"[0m[38;2;230;219;116mE[0m[38;2;230;219;116mR[0m[38;2;230;219;116mC[0m[38;2;230;219;116m7[0m[38;2;230;219;116m2[0m[38;2;230;219;116m1[0m[38;2;230;219;116m:[0m[38;2;248;248;242m [0m[38;2;230;219;116mt[0m[38;2;230;219;116mr[0m[38;2;230;219;116ma[0m[38;2;230;219;116mn[0m[38;2;230;219;116ms[0m[38;2;230;219;116mf[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;248;248;242m [0m[38;2;230;219;116mt[0m[38;2;230;219;116mo[0m[38;2;248;248;242m [0m[38;2;230;219;116mt[0m[38;2;230;219;116mh[0m[38;2;230;219;116me[0m[38;2;248;248;242m [0m[38;2;230;219;116mz[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;230;219;116mo[0m[38;2;248;248;242m [0m[38;2;230;219;116ma[0m[38;2;230;219;116md[0m[38;2;230;219;116md[0m[38;2;230;219;116mr[0m[38;2;230;219;116me[0m[38;2;230;219;116ms[0m[38;2;230;219;116ms[0m[38;2;230;219;116m"[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
306+
307+[38;2;248;248;242m [0m[38;2;102;217;239m_beforeTokenTransfer[0m[38;2;248;248;242m([0m[38;2;248;248;242mfrom, to, tokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
308+
309+[38;2;248;248;242m [0m[38;2;117;113;94m//[0m[38;2;117;113;94m Clear approvals from the previous owner[0m
310+[38;2;248;248;242m [0m[38;2;102;217;239m_approve[0m[38;2;248;248;242m([0m[38;2;190;132;255maddress[0m[38;2;248;248;242m([0m[38;2;190;132;255m0[0m[38;2;248;248;242m)[0m[38;2;248;248;242m, tokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
311+
312+[38;2;248;248;242m _balances[0m[38;2;248;248;242m[[0m[38;2;248;248;242mfrom[0m[38;2;248;248;242m][0m[38;2;248;248;242m [0m[38;2;249;38;114m-[0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;190;132;255m1[0m[38;2;248;248;242m;[0m
313+[38;2;248;248;242m _balances[0m[38;2;248;248;242m[[0m[38;2;248;248;242mto[0m[38;2;248;248;242m][0m[38;2;248;248;242m [0m[38;2;249;38;114m+[0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;190;132;255m1[0m[38;2;248;248;242m;[0m
314+[38;2;248;248;242m _owners[0m[38;2;248;248;242m[[0m[38;2;248;248;242mtokenId[0m[38;2;248;248;242m][0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m to;[0m
315+
316+[38;2;248;248;242m [0m[38;2;249;38;114memit[0m[38;2;248;248;242m [0m[38;2;102;217;239mTransfer[0m[38;2;248;248;242m([0m[38;2;248;248;242mfrom, to, tokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
317+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
318+
319+[38;2;248;248;242m [0m[38;2;117;113;94m/**[0m
320+[38;2;117;113;94m * @dev Approve `to` to operate on `tokenId`[0m
321+[38;2;117;113;94m *[0m
322+[38;2;117;113;94m * Emits a {Approval} event.[0m
323+[38;2;117;113;94m [0m[38;2;117;113;94m*/[0m
324+[38;2;248;248;242m [0m[3;38;2;102;217;239mfunction[0m[38;2;248;248;242m [0m[38;2;166;226;46m_approve[0m[38;2;248;248;242m([0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mto[0m[38;2;248;248;242m, [0m[38;2;190;132;255muint256[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mtokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114minternal[0m[38;2;248;248;242m [0m[38;2;249;38;114mvirtual[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
325+[38;2;248;248;242m _tokenApprovals[0m[38;2;248;248;242m[[0m[38;2;248;248;242mtokenId[0m[38;2;248;248;242m][0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m to;[0m
326+[38;2;248;248;242m [0m[38;2;249;38;114memit[0m[38;2;248;248;242m [0m[38;2;102;217;239mApproval[0m[38;2;248;248;242m([0m[38;2;248;248;242mERC721[0m[38;2;248;248;242m.[0m[38;2;102;217;239mownerOf[0m[38;2;248;248;242m([0m[38;2;248;248;242mtokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m, to, tokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
327+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
328+
329+[38;2;248;248;242m [0m[38;2;117;113;94m/**[0m
330+[38;2;117;113;94m * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.[0m
331+[38;2;117;113;94m * The call is not executed if the target address is not a contract.[0m
332+[38;2;117;113;94m *[0m
333+[38;2;117;113;94m * @param from address representing the previous owner of the given token ID[0m
334+[38;2;117;113;94m * @param to target address that will receive the tokens[0m
335+[38;2;117;113;94m * @param tokenId uint256 ID of the token to be transferred[0m
336+[38;2;117;113;94m * @param _data bytes optional data to send along with the call[0m
337+[38;2;117;113;94m * @return bool whether the call correctly returned the expected magic value[0m
338+[38;2;117;113;94m [0m[38;2;117;113;94m*/[0m
339+[38;2;248;248;242m [0m[3;38;2;102;217;239mfunction[0m[38;2;248;248;242m [0m[38;2;166;226;46m_checkOnERC721Received[0m[38;2;248;248;242m([0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mfrom[0m[38;2;248;248;242m, [0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mto[0m[38;2;248;248;242m, [0m[38;2;190;132;255muint256[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mtokenId[0m[38;2;248;248;242m, [0m[38;2;190;132;255mbytes[0m[38;2;248;248;242m [0m[38;2;249;38;114mmemory[0m[3;38;2;253;151;31m _data[0m[38;2;248;248;242m)[0m
340+[38;2;248;248;242m [0m[38;2;249;38;114mprivate[0m[38;2;248;248;242m [0m[38;2;249;38;114mreturns[0m[38;2;248;248;242m [0m[38;2;248;248;242m([0m[38;2;190;132;255mbool[0m[38;2;248;248;242m)[0m
341+[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
342+[38;2;248;248;242m [0m[38;2;249;38;114mif[0m[38;2;248;248;242m [0m[38;2;248;248;242m([0m[38;2;248;248;242mto[0m[38;2;248;248;242m.[0m[38;2;102;217;239misContract[0m[38;2;248;248;242m([0m[38;2;248;248;242m)[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
343+[38;2;248;248;242m [0m[38;2;249;38;114mtry[0m[38;2;248;248;242m [0m[38;2;102;217;239mIERC721Receiver[0m[38;2;248;248;242m([0m[38;2;248;248;242mto[0m[38;2;248;248;242m)[0m[38;2;248;248;242m.[0m[38;2;102;217;239monERC721Received[0m[38;2;248;248;242m([0m[38;2;102;217;239m_msgSender[0m[38;2;248;248;242m([0m[38;2;248;248;242m)[0m[38;2;248;248;242m, from, tokenId, _data[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114mreturns[0m[38;2;248;248;242m [0m[38;2;248;248;242m([0m[38;2;190;132;255mbytes4[0m[38;2;248;248;242m [0m[38;2;248;248;242mretval[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
344+[38;2;248;248;242m [0m[38;2;249;38;114mreturn[0m[38;2;248;248;242m retval [0m[38;2;249;38;114m==[0m[38;2;248;248;242m [0m[38;2;102;217;239mIERC721Receiver[0m[38;2;248;248;242m([0m[38;2;248;248;242mto[0m[38;2;248;248;242m)[0m[38;2;248;248;242m.onERC721Received.[0m[38;2;249;38;114mselector[0m[38;2;248;248;242m;[0m
345+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m[38;2;248;248;242m [0m[38;2;249;38;114mcatch[0m[38;2;248;248;242m [0m[38;2;248;248;242m([0m[38;2;190;132;255mbytes[0m[38;2;248;248;242m [0m[38;2;249;38;114mmemory[0m[3;38;2;253;151;31m reason[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
346+[38;2;248;248;242m [0m[38;2;249;38;114mif[0m[38;2;248;248;242m [0m[38;2;248;248;242m([0m[38;2;248;248;242mreason.[0m[3;38;2;166;226;46mlength[0m[38;2;248;248;242m [0m[38;2;249;38;114m==[0m[38;2;248;248;242m 0[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
347+[38;2;248;248;242m [0m[38;2;249;38;114mrevert[0m[38;2;248;248;242m([0m[38;2;230;219;116m"[0m[38;2;230;219;116mE[0m[38;2;230;219;116mR[0m[38;2;230;219;116mC[0m[38;2;230;219;116m7[0m[38;2;230;219;116m2[0m[38;2;230;219;116m1[0m[38;2;230;219;116m:[0m[38;2;248;248;242m [0m[38;2;230;219;116mt[0m[38;2;230;219;116mr[0m[38;2;230;219;116ma[0m[38;2;230;219;116mn[0m[38;2;230;219;116ms[0m[38;2;230;219;116mf[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;248;248;242m [0m[38;2;230;219;116mt[0m[38;2;230;219;116mo[0m[38;2;248;248;242m [0m[38;2;230;219;116mn[0m[38;2;230;219;116mo[0m[38;2;230;219;116mn[0m[38;2;248;248;242m [0m[38;2;230;219;116mE[0m[38;2;230;219;116mR[0m[38;2;230;219;116mC[0m[38;2;230;219;116m7[0m[38;2;230;219;116m2[0m[38;2;230;219;116m1[0m[38;2;230;219;116mR[0m[38;2;230;219;116me[0m[38;2;230;219;116mc[0m[38;2;230;219;116me[0m[38;2;230;219;116mi[0m[38;2;230;219;116mv[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;248;248;242m [0m[38;2;230;219;116mi[0m[38;2;230;219;116mm[0m[38;2;230;219;116mp[0m[38;2;230;219;116ml[0m[38;2;230;219;116me[0m[38;2;230;219;116mm[0m[38;2;230;219;116me[0m[38;2;230;219;116mn[0m[38;2;230;219;116mt[0m[38;2;230;219;116me[0m[38;2;230;219;116mr[0m[38;2;230;219;116m"[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m
348+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m[38;2;248;248;242m [0m[38;2;249;38;114melse[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
349+[38;2;248;248;242m [0m[38;2;117;113;94m//[0m[38;2;117;113;94m solhint-disable-next-line no-inline-assembly[0m
350+[38;2;248;248;242m [0m[3;38;2;102;217;239massembly[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
351+[38;2;248;248;242m [0m[38;2;102;217;239mrevert[0m[38;2;248;248;242m([0m[38;2;102;217;239madd[0m[38;2;248;248;242m([0m[38;2;190;132;255m32[0m[38;2;248;248;242m, reason), [0m[38;2;102;217;239mmload[0m[38;2;248;248;242m(reason))[0m
352+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
353+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
354+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
355+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m[38;2;248;248;242m [0m[38;2;249;38;114melse[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
356+[38;2;248;248;242m [0m[38;2;249;38;114mreturn[0m[38;2;248;248;242m [0m[38;2;190;132;255mtrue[0m[38;2;248;248;242m;[0m
357+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
358+[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
359+
360+[38;2;248;248;242m [0m[38;2;117;113;94m/**[0m
361+[38;2;117;113;94m * @dev Hook that is called before any token transfer. This includes minting[0m
362+[38;2;117;113;94m * and burning.[0m
363+[38;2;117;113;94m *[0m
364+[38;2;117;113;94m * Calling conditions:[0m
365+[38;2;117;113;94m *[0m
366+[38;2;117;113;94m * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be[0m
367+[38;2;117;113;94m * transferred to `to`.[0m
368+[38;2;117;113;94m * - When `from` is zero, `tokenId` will be minted for `to`.[0m
369+[38;2;117;113;94m * - When `to` is zero, ``from``'s `tokenId` will be burned.[0m
370+[38;2;117;113;94m * - `from` cannot be the zero address.[0m
371+[38;2;117;113;94m * - `to` cannot be the zero address.[0m
372+[38;2;117;113;94m *[0m
373+[38;2;117;113;94m * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].[0m
374+[38;2;117;113;94m [0m[38;2;117;113;94m*/[0m
375+[38;2;248;248;242m [0m[3;38;2;102;217;239mfunction[0m[38;2;248;248;242m [0m[38;2;166;226;46m_beforeTokenTransfer[0m[38;2;248;248;242m([0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mfrom[0m[38;2;248;248;242m, [0m[38;2;190;132;255maddress[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mto[0m[38;2;248;248;242m, [0m[38;2;190;132;255muint256[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mtokenId[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114minternal[0m[38;2;248;248;242m [0m[38;2;249;38;114mvirtual[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
376+[38;2;248;248;242m}[0m