From 5bd55da4fc18d5bb44e95d89fc66e87cc67a1d53 Mon Sep 17 00:00:00 2001
From: Luigi Rosso <luigi.rosso@gmail.com>
Date: Mon, 28 Sep 2020 16:56:53 -0700
Subject: [PATCH] Bumping runtime version and murdering fractional.

---
 CHANGELOG.md                             |   6 +
 example/assets/off_road_car.riv          | Bin 0 -> 35685 bytes
 example/lib/main.dart                    |   2 +-
 example/pubspec.lock                     |  38 ++--
 lib/src/core/core.dart                   |   5 +-
 lib/src/fractional/fractional.dart       | 239 -----------------------
 lib/src/utilities/dependency_sorter.dart |  12 +-
 pubspec.lock                             |  38 ++--
 pubspec.yaml                             |   2 +-
 9 files changed, 55 insertions(+), 287 deletions(-)
 create mode 100644 example/assets/off_road_car.riv
 delete mode 100644 lib/src/fractional/fractional.dart

diff --git a/CHANGELOG.md b/CHANGELOG.md
index a84809d..bf70b6d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+## [0.6.0] - 2020-09-28 16:22:43
+
+- Adding a ToC to files indicating included core properties and their backing field types so that they may be skipped by runtimes that do not understand those properties. This will allow newer minor version files to be read by older minor version runtimes.
+- New clipping system allowing for recursive shapes to be included as sources by selecting a node for clipping.
+- New draw order system using draw targets.
+
 ## [0.5.2] - 2020-08-28 18:24:45
 
 - Adding trim paths.
diff --git a/example/assets/off_road_car.riv b/example/assets/off_road_car.riv
new file mode 100644
index 0000000000000000000000000000000000000000..3e9d9bb2a7ad3a10243f6a1f9126e7f0cad7f1e4
GIT binary patch
literal 35685
zcmeHwd0-RO_VA?1WI>X)p_EKTy3qn<m4bklCYe-3MZ|_39<)HqR%k8Yf(wzgAR@Bw
zuL!b<EG|!3vlLlm6-4xhJ_~NB2s{-;RQjDWb7nG=Oo8`(e}2FIk<MA}z2}^J?mg$8
znN0E@?){*V`7sdFj%mQ?4qJ4Fy4{POPH~ryA5vOaKFq{06Z6dYVPVcb=BdM+XzaO*
zfxo)=!6X>!@P$K14=*pBFm@QrFo~=#YwE1OJgKhXZ3Aheul?#tAMA1EG4<G(%*!>-
z8sTEs;$AgP7{=#hVho1z($euPW9^ur&$B(C>zT*s4Ry*(3x^FZE-xKBo@MRl?w{ba
zw)mfteYPGQ8-$oRL){*3Z_fww?oa7aIDQ0cOwlncYjU789DWGUeP1u}2v8Ekq_~-M
zU`Y7>Ee}^v|EpmB+{D6M?-K(TxdqnBQ^%C7MqnM5rOV@7+lt*i&&EFN>NO(I$@j*d
z`xHF<2rqQjvtvdc=PP(Jm~Yuq&*}B8{mUhE*7CRJ&~jG4pulzfMEg80kb69szsWQy
z*L!C6<Dw|{=XC-6-HU?xCleobdQJa6o-4HeZ2u#93aL?)W`~}Hfu@ZoQ5-MMB~dP9
zy~GQReqKHU8uj%%!>V>Kd<FWy{B|(EW$~C@-uZKbqN=Xv=L2iWXn&Y>X#8qGH6HKI
z|7gL~o!)7`)#Vu+_s03{q9{EVb$mF`tKuJB_}*t@4>|i>`C^bbuD}71N00)|!wHau
zHG*5%q)F;BvZN&CUce=?cV``0wjeL{;fi}hX&qKB$V<OjZ=eS}qG4vg2U?+PG|WtI
zU?<mzGbBh|$p3};w&K9Tq$jH;J=qa8>B+TBda@&G(vxpH>B$c5Nl$htCq3DrJ?Y5~
z?MY8|L`{0~Z6`h1vGR`!aeAbgOm+-v_A*TR@B=|F<4SOX|0O%d?3<IvRsJ0a=BHep
z;q<=t(S7Kp$&LfM*CJbM`$6(;{eU>g4`@aNNN<QM8998!_`&5x#U({U$B!%>%d&9|
zk5)P39qi{$Yu{<tLbi3U)!PS4+8`|DY++X0DP}dDZRgl_><yk{HvNmwf98)L{9f0R
z=IDRz98Cu%dpJk8_UM1@9RE{itA~53Q%esh-p;Y{!dwqGr(_SGU-SNZPH&gT4Pu*5
z_jUGge}B;<$XM8H@KPgrXEu0ePS)nf^q$nF9a%o@$osLL^idgBPphNdlAPd~oil4{
zYWhhRW^wn*VzUQ+5CfZ-d1ztz;31{Mo@H6<iKiBaY|JmPQ^go8h#ylrzO<ZmTbZU;
z_u7^WZd?U~yF|-~TO1!Zc>Qb6_!oYza9Z1yWqE8J%ijyZHpt0-Py1aySg~;I@RB0d
z6C2k#loR)ladUFxs|PO0wfZ*P4A_|X^dK0sQLXL79W&4Bd-pT9?aC-4FBtqm2UEH$
zzyTaeVk$SIiwG!J1j_eNBR8UW1y{}weg(?H=7CWYBgZEr=P`En(G2rbHO)ZC%t$5)
zmX#!7W1k=NUQYb1F-@J;Hm6;@%|4pMek@vS0i_oEF-Mfxz@--ZzmX>C==PlW>YMjE
ztxWl8SJ;U8(b5PgwKVzB(g2rQ8oeP|vPI<o2TMvumW{*dcmMhE&bYVB1~}u}zcb2d
z^*NgbZOrpULB?Qc9N9{OskLa=KC#xS!aZ?JV4gD`Kdc3XS#Ddw+KKLjg2GMi`UPum
zxM7j>f%%N`C#gf4*FG?>{WAh5PS$|aHjs$Y|2vYop~NlySIIh1lr?+Y2hMo>s72O+
zxA47zAmiYS`|j&h1FO%jSbZr&%1cKVjb-^bh8YQ_fDh~BqNyI6ue-1a<0Xk?zhn!=
z#n&!-U2Z&nSl7PyOTad}VOv~$vh&OQqP>SiEV`l5{vx2%{xUS$Uw}*PFBWzPC>|Ma
zhk(K(rNtICgOS43y2wUHiz%SgVvdd$6S&l3-hN*i5?kBiDvOpvK&hoDi<Sbo)Kc8S
zK?|*e3bTT?g=;6`D!R2tPPntxGvO8<IRPf<8EMtTN?s<dmO^Vf3Nuv{M$Uv(%VOf4
zEsKd7-Z2pde?eRhdP6KmsbQt1@KH3raAXNv7`Ni}+0J<Uu(lt*p~|+es2(QXwfXiW
zYvu3)x2^KsSho;Rd^!gpf*c@%NsQ|qj3^?`T^r7=<`dcy&caU8&|ng1FkP3C+4WQn
zlf_ONI8z6kPn0ISb?%Gykgdm%>nOi1!tH13A_SkMA-ITB3$DP)f-Bm}f`d@u90LG5
zI~PQr4kE+B2QAL>)`C`tgSLvn--eiGgqx>}ZJpCK(67UkBECP<rhM-JrlN@-)U(L)
zv-1TWmvz(DoxCmgN|IYcy#+d}FKMLP#*EtF66R&0&H;!Z2Z%rtQ@s!8MZ~#l!-ZLd
zW-bT`3zSL$U}u+uQY}C!y}>H^v3EpaS&<}VoX0iY86Uc98U(8Jv%D>%azDzeKF6)p
z2{NwILHhTxQ##2Z*gMz7`Pc-^;1JBL3+dpBLdZfke2&K&!1?NC@SMXGB$mq9qdd3m
z?<xY#dI0f!0>ZCE;Uo7-K-$@Lpu|AInO5osZbWZlYg3|A@Dy+RRCfTC5Hr_}qVSv4
z!Xu~<9>7t%8}Quv`v%Fv18(1x<~%pcy9cEOP!zr}K%i21kSgp>0NB~L$({6uhEI<i
zJ8ayDkwqoLQl1`JR#ZN2@Q}iBMT5&R1qU}XuXuyEt*B~N1$$dv)i(03&dQWL<+9;N
z0#kC$RUbdVR_`i@1HjI{ugh5Q>P+<B#OUElii%;N*nQ(Zg51a(4A?$6lvxF4)QF%v
zbk@>2T+sIU;*q!7S9XGAp{-8ahP--Wrn(CZ8rtgTHmv9hsVcMG2__S9&Pd!n*FSV}
zKTPTmYtgro_*Oryb8}_O*Pz!xv+8d?c5$2MzenJvrfdCN>-`g`g@xUz<tu=+vsJo`
zci(xtCd!9F;Oby&mu;HkF%(#DxI5ZR!mNn4ip$P+K}G`~R^OA>pfo+V4n6y8o38yR
zuDnG{3z2d(AllhOB=+s(vidSx$kJ%Xp2M|CaahY}fV8v6WanuRZ547;(R()BwUw8=
zN3rLfP<u_}ZvJtkx15x`C9j_BEg}xQMU9K{7T{BQ3xG;*0Wiv2K31+40PO7l$X+6D
z5+I=3J8rXP74EU2e51U2wI}4u+9u>ntqB37ovoJL!CYQAY-AxGQ+aDiSC_~3!HXBQ
z0_J&$D5|65*I?qvv!jSpr)GeQI))*iIytkj=aohTz|Q`l%V^l3J}x!cwdE)%X4W8-
za4?k5vp;DFCF0aV0WL}?<WmcE%YoHrz$+R9i#YYbfQuR!`P2jJ4JIiY<gHV`yT@aT
zTk}aMYWu#b6Vt%r;x*2A{HW!0bX93u0PO5_T?WKN4BJuZCvUyd_(dAf!rstwAwb&M
zzo?7b<;yonNYf%XZq_O!gj}kK#Ls%F+-Y5qVDi{L`|R4SVnmJ3nlpV4ZyWz1FUAO8
zi~|rM4iK>FNBo7myNKhXaC4Rc?w%G9jVsRyNh-8`aWb@(aTc~lOL;&hveRR-YU*aW
zQ|~&po=-~}VfLgqI<V9QHKG|Yna@2x9SfRpwSL1pRME_Wz6QP=1NOd4P;;<w3}tyy
z+1bf;Jhm1IOcl6#<kt3bOoWoNHIx)_Y9$dDsU+eel?186nFRoLc3zAa;;6VaqO^1v
zNV<H)6sPqw|0dq{SJPw+?hy&!f*9+Dyg<nI*~uSWQPFW>jF90iicu8!SQfykzc%x5
zF8%~g6@b2&Nl>W2d6d8v_q_nrPhW+&%v{7-0v5w*Xu({14RB>vsaexmE{>V}ETpz6
zvoU{Jh)PA~dVsXEt70;kO*QEGl;cTqGp7W(#r?Wcly|jSUI3Ny0;rT1z$keEm+)97
z$lHG^$cFN!vw#a2{g9TP`Z17?HyOOAR<^^G5BrN$q*6IM0NB}0puk6h0&(G3I(TSF
zQ6W?^M1R`ZvqhDy^7wFEJW&~ilpP3V*Uh4yZ^bzBM^E%{XVzQ_!7Ts)+srTVa6?=j
zt9oy2HF{5<GwWxfgg|)isY(wwVm0tt*v%+hRDnSnfYJ|Of@C!&qs`qMZsoO>sHA2j
zSA0#)BuFMrO<lH>^Fuxm+~?gG$FX5gdbkf(!SE~#;HZ^J9&Xw{1*rkNIo#^uYAW4T
zJ#{m;IeTTCsc`lFSKAl%^x5#vdpt~eeR&WntBPs9hS}suE4RQK5Fd!<+MzTT%K})j
zW~hhzsM(Mz5DUN;HZ1gTTN)3k0>3Ro9|fG!a8Nm}JzoQ&o%P3L<TOr0gWY-pKZwyX
zR4~R--ooVJ_7|fFt{-se0IqvQe-F2<P>>Qpr7Zyr+w%Y2Q2Rwg9RNAJ29V>MVp$Hr
zy-;^CnCElEiRJ;^pZ{D7el_MpoLB%yy^Iq(8bAxX|5nxlqMbboYhszOCL%T^jhR&+
zJ&%imo``XLbF79}2@1F<K>?=}6u?o*iK3uz*yxU1&vBGCa_a%4o&7XMJZ9<@Hw`od
z)ONkkL_t4~aX3b_;<=+I7_eT!a-3Pf9a*?2$Spc9;0_Y5Y~brbZvP;`${(N;0^g0p
z4Z!l=V)Ro0%X`%EaIfB7K%hAZj-xRECNXmzJm~V-tt=13MD|=vmgSX8?$pqxfmLZK
zzg%*s=N^IH>#^r!GIJWcFc893pFXcsAdCtd8U|3$(6^%E-+|)Q52zIfT$JK~i&7kL
zO2q+GDh{A|UPra!-)c=FAQRb3wJCf#CbOBn1u6_zN`=FBh<Iz|`-_4$SMxPkF4mss
zUqp3(RYV?GB>|jMz!fxgK)nY41hD$_e*pZc4P-l&$8m~*rQ+&OJXbKgI0T^vz_Rzx
z@!W}JQ$zWAB`5vfb$j&0ccSnj5WZQ23l8{Po*`~7CAS>9TG0UK{+C<LJrE%S1b^-!
z)P8DHQ9YA4Mb&CFR0Et+H2|Yj1DvQ@1*pcd05;y1;^BIHI2=S44FtH&m2hXUI$^OA
zCu(|L&=gprG`*=c*?_dOGxZrvg|M$EG>ne1+B5mGUI<#V^^T8H93C$2SQQ8rn20k8
zxQ>+>9&Y{IgQyFD%3TG(x16UvoVn|KqF(*@3lDd}KZQVN$CVy##l-yt9=p~Mm>)Yp
z;H11Q9xh;imB93e)_b_wxm^kDeYU=b+wetC0*Czy;OI|x<39Vc{uWUQh>7e{eb&oQ
zPxqt_+A=7VcCJx{Cq3)uwIOi%W%^8^f+k#HdLrH>Rqb>t=NHqgm7<AO>BDKEG?##L
zw1w>meO-auHn=U%RcA9`O3~wiFUk)97v%?li<<bAsIYV&7yzgQ>N6TN8i(28|HXuF
z5VhH;cclE*DaiTG*9R$mt8l#mu6jc;Y{#AYV9*n`W58Yb$-#45TB&dqF`#w8c0W!K
zu*`1rPf)o0QZR{WY~)4UipMwcT;=*1)N|EUn8Sj0uMxQEHvkuWDR>rip!6&Nm7WEl
z(z5_mdKQ36&jL{CSpb%%zV6}L{ADIdi(krurMG$wNcu?(NjmRxBM*1QVkWTRndLm!
zCY2$u<Dv09ccr}r%(UBpd(MVic_0w&>|VVXL*YJp@kpq7jvby-j>nVOC9UK3Snqo)
zy~@_Hbq(G^r}RFcxB5~Gpv1{!=fb8d`dv_*sgT0&n3imn9=1%t6>OXo<l64ZuF8L`
zqT28EAKA_`t=JFs#l9Nd@X0Y{{+D!5PL6@80N!r=+7P#N)ef9hpA$McpdU`8Ph9Il
z+&zI0WYQrd2_v-GzBb4ub%qh<^m^Or?LJ`>j&N8SVJwVL3L^--%>EMrjyYk=#j}Fb
zJ9ToPGw>eOGtFWA5yfXFIY<7{B(C!)_}DWV!IBlfzv>yYbcQaEX~7=X51wx<c;e4V
z&ca4Ncy<qgkDQ?h4x4^7=qY;bN&<0xtuGktcy@2$*vFr74uKE<Py~kst6%XHE%8EM
z7B;9{E&$lsQ~Hd4Q=k~Cv^H~^3D|t|)(2#3pVp@^aH{wetnHf~;Qm_oPN?UW9p5{9
zJyK(E^=^AUInd|mnIGJs)fv6WS9a-WkehXSa8=JA+8uEAN*&aZ?>)iwSfEe&;<{+5
z&-KL{-@>^V3;)1UW$;g&5*Xx}DN91!Bi-Jsg4sBWCT|WyYZ}Ub&nuoW-*;lr1Yh2f
zp@8cS40T%1I1Fa*c)Yy~&p(~kw}ws31@=0p&uG}NO%2@ciBotlJU%kEhz;mtI~3pW
z$LYY2;_;(j=e*sX{^#3e_y_#GzpEdNY#3Kmhz0$*e|{0NRiE}~)eFASTV0=-cw1%G
zKX@Vje5-dHoSqTl0D<wR5_bu}^?h{=Y%~8-;Wq#98qfJw4aDUMEOV#*JBZD2WqzZa
zdjJyIpY&PVTD0U-neQg$ruBW7=hMHQa-N4+a8aL`VvWZ{NW5aCSin9#qNu0@<nK}5
zH)MO{$6Z?TU)Ea<&8G9V>Y-gk`LF05fCzDb0Qn32D8Gn<eNh|7tNDbsgtM@hm6`yM
z$X?TD<=p>>C-wS^^+RbX6ZX5)TcmGBO@7yB&MqxQP2ei_uDd9zDd+Yw&aKM@z1+}e
zm91#Tr>0yC@o6J|p24Rx!;ArF`={7eyjtP&Q7;0aV~Z9wO*X$;lq(0KwkTjCTcgja
zp5)_GD`!9NPAl8&<I{aj8w8;bp8;iJ#H){Y@0KHNogsz8rMtL%Tyb$9thV)WTDQ$>
zSY_MlUtGnQqKZpX4Aw=vw(vGr={Q%yqFt>#^<AaE;vr^=K^Ev<1mK3NA)`a{c6h^e
ziecbP19+nz283rP!XvftII3)Q&#cy()|m!t&zyhqwiE1m@ka41g98vD4iFG9I?l&w
z6>*T2YU7~dqvR9X63)VcNa0uxKq5QWkd@PNE;#7Csm`<wb6(}spP5sD)B2hr^T6IJ
zoL0EX&2A%42!N$S3u>DDxea0k)L_w~<wX!(6iW7e{%Xkf?Y=iq$=b@&3nP_XM9N;U
zKLI{0Dk0){P78-tQuC>mU5Ls?o-qNL$gVJC4aj_zPpvz6S5T$&N<-!|9ll1T;i@g`
zl9dLqlWhShjrXP}3>^&`FXIL|<MG3KVp8*v?YY1ftofOdI=JZBB6c;@|5{GqZ3CO`
zj4n*SZm{~=@(^@uX1Nl4Z9{Nhv8E0_Q}nuWmH@D`Zx}KX8#TcYViEc-D=Hj~ogYkF
z0JlBPZN?gw7_`?LU_VP|Hy9kumP3AyagE!XKQJ+FkN2yyy<8%}xB0q@3zU54%0D<s
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
I*#_JFA28d3{{R30

literal 0
HcmV?d00001

diff --git a/example/lib/main.dart b/example/lib/main.dart
index 6b8fd0f..945493b 100644
--- a/example/lib/main.dart
+++ b/example/lib/main.dart
@@ -44,7 +44,7 @@ class _MyHomePageState extends State<MyHomePage> {
 
     // Load the animation file from the bundle, note that you could also
     // download this. The RiveFile just expects a list of bytes.
-    rootBundle.load('assets/teeny_tiny.riv').then(
+    rootBundle.load('assets/off_road_car.riv').then(
       (data) async {
         var file = RiveFile();
         // Load the RiveFile from the binary data.
diff --git a/example/pubspec.lock b/example/pubspec.lock
index cb16ca4..22d6b07 100644
--- a/example/pubspec.lock
+++ b/example/pubspec.lock
@@ -7,49 +7,49 @@ packages:
       name: async
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.5.0-nullsafety"
+    version: "2.5.0-nullsafety.1"
   boolean_selector:
     dependency: transitive
     description:
       name: boolean_selector
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.1.0-nullsafety"
+    version: "2.1.0-nullsafety.1"
   characters:
     dependency: transitive
     description:
       name: characters
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.1.0-nullsafety.2"
+    version: "1.1.0-nullsafety.3"
   charcode:
     dependency: transitive
     description:
       name: charcode
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.2.0-nullsafety"
+    version: "1.2.0-nullsafety.1"
   clock:
     dependency: transitive
     description:
       name: clock
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.1.0-nullsafety"
+    version: "1.1.0-nullsafety.1"
   collection:
     dependency: transitive
     description:
       name: collection
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.15.0-nullsafety.2"
+    version: "1.15.0-nullsafety.3"
   fake_async:
     dependency: transitive
     description:
       name: fake_async
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.1.0-nullsafety"
+    version: "1.2.0-nullsafety.1"
   flutter:
     dependency: "direct main"
     description: flutter
@@ -73,21 +73,21 @@ packages:
       name: matcher
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.12.10-nullsafety"
+    version: "0.12.10-nullsafety.1"
   meta:
     dependency: transitive
     description:
       name: meta
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.3.0-nullsafety.2"
+    version: "1.3.0-nullsafety.3"
   path:
     dependency: transitive
     description:
       name: path
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.8.0-nullsafety"
+    version: "1.8.0-nullsafety.1"
   rive:
     dependency: "direct main"
     description:
@@ -106,55 +106,55 @@ packages:
       name: source_span
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.8.0-nullsafety"
+    version: "1.8.0-nullsafety.2"
   stack_trace:
     dependency: transitive
     description:
       name: stack_trace
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.10.0-nullsafety"
+    version: "1.10.0-nullsafety.1"
   stream_channel:
     dependency: transitive
     description:
       name: stream_channel
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.1.0-nullsafety"
+    version: "2.1.0-nullsafety.1"
   string_scanner:
     dependency: transitive
     description:
       name: string_scanner
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.1.0-nullsafety"
+    version: "1.1.0-nullsafety.1"
   term_glyph:
     dependency: transitive
     description:
       name: term_glyph
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.2.0-nullsafety"
+    version: "1.2.0-nullsafety.1"
   test_api:
     dependency: transitive
     description:
       name: test_api
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.2.19-nullsafety"
+    version: "0.2.19-nullsafety.2"
   typed_data:
     dependency: transitive
     description:
       name: typed_data
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.3.0-nullsafety.2"
+    version: "1.3.0-nullsafety.3"
   vector_math:
     dependency: transitive
     description:
       name: vector_math
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.1.0-nullsafety.2"
+    version: "2.1.0-nullsafety.3"
 sdks:
-  dart: ">=2.10.0-0.0.dev <2.10.0"
+  dart: ">=2.10.0-110 <2.11.0"
diff --git a/lib/src/core/core.dart b/lib/src/core/core.dart
index 458bc50..91c7921 100644
--- a/lib/src/core/core.dart
+++ b/lib/src/core/core.dart
@@ -1,14 +1,11 @@
-export 'package:rive/src/fractional/fractional.dart';
 export 'package:rive/src/animation_list.dart';
 export 'package:rive/src/container_children.dart';
 export 'package:rive/src/runtime_artboard.dart';
 export 'package:rive/src/generated/rive_core_context.dart';
 
-
 typedef PropertyChangeCallback = void Function(dynamic from, dynamic to);
 typedef BatchAddCallback = void Function();
 
-
 abstract class Core<T extends CoreContext> {
   covariant T context;
   int get coreType;
@@ -20,7 +17,7 @@ abstract class Core<T extends CoreContext> {
   void onRemoved();
 }
 
-abstract class CoreContext{
+abstract class CoreContext {
   Core makeCoreInstance(int typeKey);
   T resolve<T>(int id);
   void markDependencyOrderDirty();
diff --git a/lib/src/fractional/fractional.dart b/lib/src/fractional/fractional.dart
deleted file mode 100644
index 687fe5c..0000000
--- a/lib/src/fractional/fractional.dart
+++ /dev/null
@@ -1,239 +0,0 @@
-import 'dart:collection';
-
-const _minIndex = FractionalIndex.min();
-const _maxIndex = FractionalIndex.max();
-
-abstract class FractionallyIndexedList<T> extends ListBase<T> {
-  final List<T> _values;
-  FractionalIndex orderOf(T value);
-  List<T> get values => _values;
-
-  @override
-  int get length => _values.length;
-
-  @override
-  set length(int value) => _values.length = value;
-
-  @override
-  T operator [](int index) => _values[index];
-
-  @override
-  void operator []=(int index, T value) => _values[index] = value;
-
-  FractionallyIndexedList({
-    List<T> values,
-    bool initOrder = true,
-  }) : _values = values ?? <T>[] {
-    if (_values.isEmpty || !initOrder) {
-      return;
-    }
-    // Otherwise spread them evenly across our range using 1/2 as the midpoint.
-    int mid = _values.length ~/ 2;
-    var midIndex = const FractionalIndex(1, 2);
-    setOrderOf(_values[mid], midIndex);
-
-    var lastIndex = midIndex;
-    for (int i = mid + 1; i < _values.length; i++) {
-      var index = FractionalIndex.between(lastIndex, _maxIndex);
-      setOrderOf(_values[i], index);
-      lastIndex = index;
-    }
-
-    lastIndex = midIndex;
-    for (int i = mid - 1; i >= 0; i--) {
-      var index = FractionalIndex.between(_minIndex, lastIndex);
-      setOrderOf(_values[i], index);
-      lastIndex = index;
-    }
-  }
-
-  FractionallyIndexedList.raw(List<T> values) : _values = values ?? <T>[];
-
-  void setOrderOf(T value, FractionalIndex order);
-
-  /// Set the fractional indices to match the current order of the items. This
-  /// is a pretty heavy operation as it could change the fractional index of
-  /// every item in the list. Should be used sparingly for cases that really
-  /// require it.
-  void setFractionalIndices() {
-    var previousIndex = _minIndex;
-    for (final item in _values) {
-      var index = FractionalIndex.between(previousIndex, _maxIndex);
-      setOrderOf(item, index);
-      previousIndex = index;
-    }
-  }
-
-  int _compareIndex(T a, T b) {
-    return orderOf(a).compareTo(orderOf(b));
-  }
-
-  void sortFractional() => _values.sort(_compareIndex);
-
-  bool validateFractional([FractionalIndex minimum]) {
-    var previousIndex = minimum ?? _minIndex;
-
-    bool wasValid = true;
-    for (final item in _values) {
-      var order = orderOf(item);
-      if (order == null) {
-        wasValid = false;
-        continue;
-      }
-      if (order.compareTo(previousIndex) > 0) {
-        previousIndex = order;
-      }
-    }
-    if (wasValid) {
-      return true;
-    }
-
-    for (final item in _values) {
-      if (orderOf(item) == null) {
-        var index = FractionalIndex.between(previousIndex, _maxIndex);
-        setOrderOf(item, index);
-        previousIndex = index;
-      }
-    }
-    return false;
-  }
-
-  @override
-  void add(T item) {
-    assert(!contains(item));
-    _values.add(item);
-  }
-
-  @override
-  bool remove(Object element) => _values.remove(element);
-
-  void append(T item) {
-    assert(!contains(item));
-    var previousIndex = _values.isEmpty ? _minIndex : orderOf(_values.last);
-    setOrderOf(item, FractionalIndex.between(previousIndex, _maxIndex));
-    _values.add(item);
-  }
-
-  /// Gets the next fractional index safely, most of the other methods here
-  /// assume the index list is valid, this one does not. It'll find the best
-  /// next index. It's meant to be used to help implementations patch up their
-  /// lists as necessary.
-  FractionalIndex get nextFractionalIndex {
-    var previousIndex = _minIndex;
-    for (final item in _values) {
-      var order = orderOf(item);
-      if (order == null) {
-        continue;
-      }
-      if (order.compareTo(previousIndex) > 0) {
-        previousIndex = order;
-      }
-    }
-    return FractionalIndex.between(previousIndex, _maxIndex);
-  }
-
-  void prepend(T item) {
-    assert(!contains(item));
-    var firstIndex = _values.isEmpty ? _maxIndex : orderOf(_values.first);
-    setOrderOf(item, FractionalIndex.between(_minIndex, firstIndex));
-    _values.add(item);
-  }
-
-  void moveToEnd(T item) {
-    var previousIndex = _values.isEmpty ? _minIndex : orderOf(_values.last);
-    setOrderOf(item, FractionalIndex.between(previousIndex, _maxIndex));
-  }
-
-  void moveToStart(T item) {
-    var firstIndex = _values.isEmpty ? _maxIndex : orderOf(_values.first);
-    setOrderOf(item, FractionalIndex.between(_minIndex, firstIndex));
-  }
-
-  void move(T item, {T before, T after}) {
-    setOrderOf(
-        item,
-        FractionalIndex.between(before != null ? orderOf(before) : _minIndex,
-            after != null ? orderOf(after) : _maxIndex));
-  }
-
-  void reverse() {
-    var indices = <FractionalIndex>[];
-    for (final item in _values) {
-      indices.add(orderOf(item));
-    }
-
-    var length = _values.length;
-    for (int i = 0; i < length; i++) {
-      setOrderOf(_values[i], indices[length - 1 - i]);
-    }
-    sortFractional();
-  }
-}
-
-class FractionalIndex {
-  final int numerator;
-  final int denominator;
-
-  const FractionalIndex(this.numerator, this.denominator)
-      : assert(numerator < denominator);
-
-  const FractionalIndex.min()
-      : numerator = 0,
-        denominator = 1;
-  const FractionalIndex.max()
-      : numerator = 1,
-        denominator = 1;
-
-  int compareTo(FractionalIndex other) {
-    return numerator * other.denominator - denominator * other.numerator;
-  }
-
-  FractionalIndex combine(FractionalIndex other) {
-    return FractionalIndex(
-        numerator + other.numerator, denominator + other.denominator);
-  }
-
-  factory FractionalIndex.between(FractionalIndex a, FractionalIndex b) {
-    return FractionalIndex(
-            a.numerator + b.numerator, a.denominator + b.denominator)
-        .reduce();
-  }
-
-  FractionalIndex reduce() {
-    int x = numerator, y = denominator;
-    while (y != 0) {
-      int t = y;
-      y = x % y;
-      x = t;
-    }
-    return FractionalIndex(numerator ~/ x, denominator ~/ x);
-  }
-
-  bool operator <(FractionalIndex other) {
-    return compareTo(other) < 0;
-  }
-
-  bool operator >(FractionalIndex other) {
-    return compareTo(other) > 0;
-  }
-
-  @override
-  bool operator ==(Object other) =>
-      other is FractionalIndex &&
-      other.numerator == numerator &&
-      other.denominator == denominator;
-
-  @override
-  int get hashCode => szudzik(numerator, denominator);
-
-  @override
-  String toString() => '$numerator/$denominator';
-}
-
-/// Szudzik's function for hashing two ints together
-int szudzik(int a, int b) {
-  // a and b must be >= 0
-  int x = a.abs();
-  int y = b.abs();
-  return x >= y ? x * x + x + y : x + y * y;
-}
diff --git a/lib/src/utilities/dependency_sorter.dart b/lib/src/utilities/dependency_sorter.dart
index 8137fe9..6625eec 100644
--- a/lib/src/utilities/dependency_sorter.dart
+++ b/lib/src/utilities/dependency_sorter.dart
@@ -15,7 +15,7 @@ class DependencySorter<T extends DependencyGraphNode<T>> {
   HashSet<T> _perm;
   HashSet<T> _temp;
   List<T> _order;
-  List<T> get order => _order;
+  List<T> get order => _order.reversed.toList();
 
   DependencySorter() {
     _perm = HashSet<T>();
@@ -27,7 +27,7 @@ class DependencySorter<T extends DependencyGraphNode<T>> {
     if (!visit(root)) {
       return null;
     }
-    return _order;
+    return _order.reversed.toList();
   }
 
   void reset() {
@@ -54,7 +54,11 @@ class DependencySorter<T extends DependencyGraphNode<T>> {
       }
     }
     _perm.add(n);
-    _order.insert(0, n);
+
+    // Note that we're adding in reverse order intentionally so we don't have to
+    // keep inserting at the start and re-alloc-ing the whole list...It does
+    // mean we need to reverse the list afterwards.
+    _order.add(n);
 
     return true;
   }
@@ -89,7 +93,7 @@ class TarjansDependencySorter<T extends DependencyGraphNode<T>>
       visit(root);
     }
 
-    return _order;
+    return _order.reversed.toList();
   }
 
   HashSet<T> findCycles(T n) {
diff --git a/pubspec.lock b/pubspec.lock
index 768db6a..6af7cad 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -7,49 +7,49 @@ packages:
       name: async
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.5.0-nullsafety"
+    version: "2.5.0-nullsafety.1"
   boolean_selector:
     dependency: transitive
     description:
       name: boolean_selector
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.1.0-nullsafety"
+    version: "2.1.0-nullsafety.1"
   characters:
     dependency: transitive
     description:
       name: characters
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.1.0-nullsafety.2"
+    version: "1.1.0-nullsafety.3"
   charcode:
     dependency: transitive
     description:
       name: charcode
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.2.0-nullsafety"
+    version: "1.2.0-nullsafety.1"
   clock:
     dependency: transitive
     description:
       name: clock
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.1.0-nullsafety"
+    version: "1.1.0-nullsafety.1"
   collection:
     dependency: transitive
     description:
       name: collection
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.15.0-nullsafety.2"
+    version: "1.15.0-nullsafety.3"
   fake_async:
     dependency: transitive
     description:
       name: fake_async
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.1.0-nullsafety"
+    version: "1.2.0-nullsafety.1"
   flutter:
     dependency: "direct main"
     description: flutter
@@ -73,21 +73,21 @@ packages:
       name: matcher
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.12.10-nullsafety"
+    version: "0.12.10-nullsafety.1"
   meta:
     dependency: "direct main"
     description:
       name: meta
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.3.0-nullsafety.2"
+    version: "1.3.0-nullsafety.3"
   path:
     dependency: transitive
     description:
       name: path
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.8.0-nullsafety"
+    version: "1.8.0-nullsafety.1"
   sky_engine:
     dependency: transitive
     description: flutter
@@ -99,55 +99,55 @@ packages:
       name: source_span
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.8.0-nullsafety"
+    version: "1.8.0-nullsafety.2"
   stack_trace:
     dependency: transitive
     description:
       name: stack_trace
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.10.0-nullsafety"
+    version: "1.10.0-nullsafety.1"
   stream_channel:
     dependency: transitive
     description:
       name: stream_channel
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.1.0-nullsafety"
+    version: "2.1.0-nullsafety.1"
   string_scanner:
     dependency: transitive
     description:
       name: string_scanner
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.1.0-nullsafety"
+    version: "1.1.0-nullsafety.1"
   term_glyph:
     dependency: transitive
     description:
       name: term_glyph
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.2.0-nullsafety"
+    version: "1.2.0-nullsafety.1"
   test_api:
     dependency: transitive
     description:
       name: test_api
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.2.19-nullsafety"
+    version: "0.2.19-nullsafety.2"
   typed_data:
     dependency: transitive
     description:
       name: typed_data
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.3.0-nullsafety.2"
+    version: "1.3.0-nullsafety.3"
   vector_math:
     dependency: transitive
     description:
       name: vector_math
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.1.0-nullsafety.2"
+    version: "2.1.0-nullsafety.3"
 sdks:
-  dart: ">=2.10.0-0.0.dev <2.10.0"
+  dart: ">=2.10.0-110 <2.11.0"
diff --git a/pubspec.yaml b/pubspec.yaml
index 9a8eaab..3c72cf2 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,6 +1,6 @@
 name: rive
 description: Rive 2 Flutter Runtime
-version: 0.5.2
+version: 0.6.0
 repository: https://github.com/rive-app/rive-flutter
 homepage: https://rive.app