- let MultiplyTyped (A : double[,]) (B : double[,]) = 
-     let rA, cA = (Array2D.length1 A) - 1, (Array2D.length2 A) - 1 
-     let cB = (Array2D.length2 B) - 1 
-     let C = Array2D.zeroCreate<double> (Array2D.length1 A) (Array2D.length2 B) 
-     for i = 0 to rA do 
-         for k = 0 to cA do 
-             for j = 0 to cB do 
-                 C.[i,j] <- C.[i,j] + A.[i,k] * B.[k,j] 
-     C 
-   
- let inline MultiplyGeneric (A : 'T[,]) (B : 'T[,]) = 
-     let rA, cA = Array2D.length1 A - 1, Array2D.length2 A - 1 
-     let cB = Array2D.length2 B - 1 
-     let C = Array2D.zeroCreate<'T> (Array2D.length1 A) (Array2D.length2 B) 
-     for i = 0 to rA do 
-         for k = 0 to cA do 
-             for j = 0 to cB do 
-                 C.[i,j] <- C.[i,j] + A.[i,k] * B.[k,j]  
-     C 
-   
- let test f = 
-   let sw = System.Diagnostics.Stopwatch.StartNew() 
-   f() |> ignore 
-   sw.Stop() 
-   printfn "%A" sw.Elapsed 
-   
- let r = new System.Random() 
- let A = Array2D.init 512 512 (fun i j -> r.NextDouble()) 
- let B = Array2D.init 512 512 (fun i j -> r.NextDouble()) 
-   
- //for i = 1 to 5 do 
- test (fun () -> MultiplyTyped A B) 
-   
- //for i = 1 to 5 do 
- test (fun () -> MultiplyGeneric A B) 
-   
				bGV0IE11bHRpcGx5VHlwZWQgKEEgOiBkb3VibGVbLF0pIChCIDogZG91YmxlWyxdKSA9CiAgICBsZXQgckEsIGNBID0gKEFycmF5MkQubGVuZ3RoMSBBKSAtIDEsIChBcnJheTJELmxlbmd0aDIgQSkgLSAxCiAgICBsZXQgY0IgPSAoQXJyYXkyRC5sZW5ndGgyIEIpIC0gMQogICAgbGV0IEMgPSBBcnJheTJELnplcm9DcmVhdGU8ZG91YmxlPiAoQXJyYXkyRC5sZW5ndGgxIEEpIChBcnJheTJELmxlbmd0aDIgQikKICAgIGZvciBpID0gMCB0byByQSBkbwogICAgICAgIGZvciBrID0gMCB0byBjQSBkbwogICAgICAgICAgICBmb3IgaiA9IDAgdG8gY0IgZG8KICAgICAgICAgICAgICAgIEMuW2ksal0gPC0gQy5baSxqXSArIEEuW2ksa10gKiBCLltrLGpdCiAgICBDCgpsZXQgaW5saW5lIE11bHRpcGx5R2VuZXJpYyAoQSA6ICdUWyxdKSAoQiA6ICdUWyxdKSA9CiAgICBsZXQgckEsIGNBID0gQXJyYXkyRC5sZW5ndGgxIEEgLSAxLCBBcnJheTJELmxlbmd0aDIgQSAtIDEKICAgIGxldCBjQiA9IEFycmF5MkQubGVuZ3RoMiBCIC0gMQogICAgbGV0IEMgPSBBcnJheTJELnplcm9DcmVhdGU8J1Q+IChBcnJheTJELmxlbmd0aDEgQSkgKEFycmF5MkQubGVuZ3RoMiBCKQogICAgZm9yIGkgPSAwIHRvIHJBIGRvCiAgICAgICAgZm9yIGsgPSAwIHRvIGNBIGRvCiAgICAgICAgICAgIGZvciBqID0gMCB0byBjQiBkbwogICAgICAgICAgICAgICAgQy5baSxqXSA8LSBDLltpLGpdICsgQS5baSxrXSAqIEIuW2ssal0gCiAgICBDCgpsZXQgdGVzdCBmID0KICBsZXQgc3cgPSBTeXN0ZW0uRGlhZ25vc3RpY3MuU3RvcHdhdGNoLlN0YXJ0TmV3KCkKICBmKCkgfD4gaWdub3JlCiAgc3cuU3RvcCgpCiAgcHJpbnRmbiAiJUEiIHN3LkVsYXBzZWQKCmxldCByID0gbmV3IFN5c3RlbS5SYW5kb20oKQpsZXQgQSA9IEFycmF5MkQuaW5pdCA1MTIgNTEyIChmdW4gaSBqIC0+IHIuTmV4dERvdWJsZSgpKQpsZXQgQiA9IEFycmF5MkQuaW5pdCA1MTIgNTEyIChmdW4gaSBqIC0+IHIuTmV4dERvdWJsZSgpKQoKLy9mb3IgaSA9IDEgdG8gNSBkbwp0ZXN0IChmdW4gKCkgLT4gTXVsdGlwbHlUeXBlZCBBIEIpCgovL2ZvciBpID0gMSB0byA1IGRvCnRlc3QgKGZ1biAoKSAtPiBNdWx0aXBseUdlbmVyaWMgQSBCKQo=