Authenticating with WordPress 2.6 (part 3)

So, as a followup to parts 1 and 2, per WordPress Trac ticket #7001, WordPress 2.6 has split up the login cookies into three parts:

  • what was the one and only login cookie in 2.5 is now limited to /wp-admin
  • there’s a copy of that one that’s just limited to /wp-content/plugins, for backward compatibility with plugins
  • there’s a new cookie that is at COOKIEPATH (which can be defined in your config file), that is checked by calling
    is_user_logged_in()

    (but perhaps this isn’t intended for secure authorization?)

So, it appears the way to go may be to change

auth_redirect()

to

  1. if (!is_user_logged_in()) auth_redirect();

Maybe more to follow on this when I’ve more thoroughly explored it.

Share and Enjoy:
  • Print
  • email
  • RSS
  • del.icio.us
  • Digg
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • Ping.fm
  • Mixx
  • Reddit
  • StumbleUpon
  • Twitter

Comments 7

  1. jc min wrote:

    you seem to know alot about wordpress cookies and hoping you can help me and the rest of wordpress community that wants to do this tweak!.

    currently have two wordpress running on a single database with different prefix and shared user tables.

    1st blog is on http://www.example.com and second is on http://www.example.com/directory/

    is there anyway i can make it so if i logon to example.com it logs me on to directory automatically? thus = single signon?

    Posted 01 Oct 2008 at 12:48 am
  2. 2718.us wrote:

    @jc min:
    I’m assuming, given that you commented on this post, that you’re using WP2.6.x in both blogs. The best I can think of off the top of my head (given that it’s 1am) is more or less along the lines of my solution to the issue of integrating bbPress 0.9.0.2 with WP2.6.x–that is, use a carefully-crafted plugin in both installs that sets and clears the appropriate cookies for the other install.

    The setting-cookies end is easier, since there’s an action hook, whereas the clearing-cookies bit requires overriding a pluggable function.

    If this makes some sense to you and you’re interested in trying it, follow up with another comment and I’ll dig out the details.

    Posted 01 Oct 2008 at 1:00 am
  3. Maski wrote:

    Hi, this is just what I was looking for!!! Thanks

    Now, Im working on the other site to have authentication based on my blog, what would I need to be able to use WPs comment system on this other site? Just copy my themes comments file?

    I know that since the other sites articles or posts arent inside wp that could be a problem, what whould you suggest?

    Posted 01 Oct 2008 at 6:00 pm
  4. 2718.us wrote:

    @maski:
    I don’t really know much about the inner workings of the comment system. I haven’t tried to use it outside of WP at all. At a guess (without looking at the code at all), I’d suspect that comments are tied to entries by some sort of entry id number and trying to integrate that with non-WP pages could be problematic.

    I don’t know the details of your implementation, but it might be easier to use WordPress as the core of the whole site, use pages for whatever you had outside WP that you wanted comments on, and then add in whatever else you want.

    Posted 01 Oct 2008 at 6:43 pm
  5. Maski wrote:

    Well.. i was afraid about that. My second guess is to build a custom comments syst only using wp authentication.

    Thanks

    Posted 02 Oct 2008 at 10:50 am
  6. roberto wrote:

    Once a WP user is authenticated, is there a session variable that the scripts can use to identify the user? (i.e., to grab user specific data from the db)

    Posted 12 Mar 2009 at 7:02 pm
  7. 2718.us wrote:

    @roberto
    What I’ve done where I tied into WP authentication is:

    require_once('/path/to/wp-config.php');
    if (!is_user_logged_in()) auth_redirect(TRUE);
    $wp_user_record = wp_get_current_user();
    $username = $wp_user_record->user_login;

    That is to say, I’ve done it by including WordPress’s functions and calling wp_get_current_user() to get the user record and go from there.

    Given the username, there are certainly ways to go about extracting info from the database directly (which avoids the memory usage of loading up all of WP) and I think you can get the username from the cookies themselves (you’d have to have your scripts know about the WP cookie name stuff), but once you start tying into the system at that kind of lower level, the risk of major headaches on WP upgrades increases substantially.

    Posted 13 Mar 2009 at 11:38 am

Trackbacks & Pingbacks 1

  1. From 2718.us blog - WordPress 2.6 is Giving Me a Headache on 03 Aug 2008 at 10:30 pm

    [...] to someone’s website, but WordPress 2.6 is starting to give me a headache.  I’ve already posted thrice about issues with integrating an external site into WP2.6’s user authentication.  Honestly, [...]

2 . 7 1 8 2 8 1 8 2 8 4 5 9 0 4 5 2 3 5 3 6 0 2 8 7 4 7 1 3 5 2 6 6 2 4 9 7 7 5 7 2 4 7 0 9 3 6 9 9 9 5 9 5 7 4 9 6 6 9 6 7 6 2 7 7 2 4 0 7 6 6 3 0 3 5 3 5 4 7 5 9 4 5 7 1 3 8 2 1 7 8 5 2 5 1 6 6 4 2 7 4 2 7 4 6 6 3 9 1 9 3 2 0 0 3 0 5 9 9 2 1 8 1 7 4 1 3 5 9 6 6 2 9 0 4 3 5 7 2 9 0 0 3 3 4 2 9 5 2 6 0 5 9 5 6 3 0 7 3 8 1 3 2 3 2 8 6 2 7 9 4 3 4 9 0 7 6 3 2 3 3 8 2 9 8 8 0 7 5 3 1 9 5 2 5 1 0 1 9 0 1 1 5 7 3 8 3 4 1 8 7 9 3 0 7 0 2 1 5 4 0 8 9 1 4 9 9 3 4 8 8 4 1 6 7 5 0 9 2 4 4 7 6 1 4 6 0 6 6 8 0 8 2 2 6 4 8 0 0 1 6 8 4 7 7 4 1 1 8 5 3 7 4 2 3 4 5 4 4 2 4 3 7 1 0 7 5 3 9 0 7 7 7 4 4 9 9 2 0 6 9 5 5 1 7 0 2 7 6 1 8 3 8 6 0 6 2 6 1 3 3 1 3 8 4 5 8 3 0 0 0 7 5 2 0 4 4 9 3 3 8 2 6 5 6 0 2 9 7 6 0 6 7 3 7 1 1 3 2 0 0 7 0 9 3 2 8 7 0 9 1 2 7 4 4 3 7 4 7 0 4 7 2 3 0 6 9 6 9 7 7 2 0 9 3 1 0 1 4 1 6 9 2 8 3 6 8 1 9 0 2 5 5 1 5 1 0 8 6 5 7 4 6 3 7 7 2 1 1 1 2 5 2 3 8 9 7 8 4 4 2 5 0 5 6 9 5 3 6 9 6 7 7 0 7 8 5 4 4 9 9 6 9 9 6 7 9 4 6 8 6 4 4 5 4 9 0 5 9 8 7 9 3 1 6 3 6 8 8 9 2 3 0 0 9 8 7 9 3 1 2 7 7 3 6 1 7 8 2 1 5 4 2 4 9 9 9 2 2 9 5 7 6 3 5 1 4 8 2 2 0 8 2 6 9 8 9 5 1 9 3 6 6 8 0 3 3 1 8 2 5 2 8 8 6 9 3 9 8 4 9 6 4 6 5 1 0 5 8 2 0 9 3 9 2 3 9 8 2 9 4 8 8 7 9 3 3 2 0 3 6 2 5 0 9 4 4 3 1 1 7 3 0 1 2 3 8 1 9 7 0 6 8 4 1 6 1 4 0 3 9 7 0 1 9 8 3 7 6 7 9 3 2 0 6 8 3 2 8 2 3 7 6 4 6 4 8 0 4 2 9 5 3 1 1 8 0 2 3 2 8 7 8 2 5 0 9 8 1 9 4 5 5 8 1 5 3 0 1 7 5 6 7 1 7 3 6 1 3 3 2 0 6 9 8 1 1 2 5 0 9 9 6 1 8 1 8 8 1 5 9 3 0 4 1 6 9 0 3 5 1 5 9 8 8 8 8 5 1 9 3 4 5 8 0 7 2 7 3 8 6 6 7 3 8 5 8 9 4 2 2 8 7 9 2 2 8 4 9 9 8 9 2 0 8 6 8 0 5 8 2 5 7 4 9 2 7 9 6 1 0 4 8 4 1 9 8 4 4 4 3 6 3 4 6 3 2 4 4 9 6 8 4 8 7 5 6 0 2 3 3 6 2 4 8 2 7 0 4 1 9 7 8 6 2 3 2 0 9 0 0 2 1 6 0 9 9 0 2 3 5 3 0 4 3 6 9 9 4 1 8 4 9 1 4 6 3 1 4 0 9 3 4 3 1 7 3 8 1 4 3 6 4 0 5 4 6 2 5 3 1 5 2 0 9 6 1 8 3 6 9 0 8 8 8 7 0 7 0 1 6 7 6 8 3 9 6 4 2 4 3 7 8 1 4 0 5 9 2 7 1 4 5 6 3 5 4 9 0 6 1 3 0 3 1 0 7 2 0 8 5 1 0 3 8 3 7 5 0 5 1 0 1 1 5 7 4 7 7 0 4 1 7 1 8 9 8 6 1 0 6 8 7 3 9 6 9 6 5 5 2 1 2 6 7 1 5 4 6 8 8 9 5 7 0 3 5 0 3 5 4 0 2 1 2 3 4 0 7 8 4 9 8 1 9 3 3 4 3 2 1 0 6 8 1 7 0 1 2 1 0 0 5 6 2 7 8 8 0 2 3 5 1 9 3 0 3 3 2 2 4 7 4 5 0 1 5 8 5 3 9 0 4 7 3 0 4 1 9 9 5 7 7 7 7 0 9 3 5 0 3 6 6 0 4 1 6 9 9 7 3 2 9 7 2 5 0 8 8 6 8 7 6 9 6 6 4 0 3 5 5 5 7 0 7 1 6 2 2 6 8 4 4 7 1 6 2 5 6 0 7 9 8 8 2 6 5 1 7 8 7 1 3 4 1 9 5 1 2 4 6 6 5 2 0 1 0 3 0 5 9 2 1 2 3 6 6 7 7 1 9 4 3 2 5 2 7 8 6 7 5 3 9 8 5 5 8 9 4 4 8 9 6 9 7 0 9 6 4 0 9 7 5 4 5 9 1 8 5 6 9 5 6 3 8 0 2 3 6 3 7 0 1 6 2 1 1 2 0 4 7 7 4 2 7 2 2 8 3 6 4 8 9 6 1 3 4 2 2 5 1 6 4 4 5 0 7 8 1 8 2 4 4 2 3 5 2 9 4 8 6 3 6 3 7 2 1 4 1 7 4 0 2 3 8 8 9 3 4 4 1 2 4 7 9 6 3 5 7 4 3 7 0 2 6 3 7 5 5 2 9 4 4 4 8 3 3 7 9 9 8 0 1 6 1 2 5 4 9 2 2 7 8 5 0 9 2 5 7 7 8 2 5 6 2 0 9 2 6 2 2 6 4 8 3 2 6 2 7 7 9 3 3 3 8 6 5 6 6 4 8 1 6 2 7 7 2 5 1 6 4 0 1 9 1 0 5 9 0 0 4 9 1 6 4 4 9 9 8 2 8 9 3 1 5 0 5 6 6 0 4 7 2 5 8 0 2 7 7 8 6 3 1 8 6 4 1 5 5 1 9 5 6 5 3 2 4 4 2 5 8 6 9 8 2 9 4 6 9 5 9 3 0 8 0 1 9 1 5 2 9 8 7 2 1 1 7 2 5 5 6 3 4 7 5 4 6 3 9 6 4 4 7 9 1 0 1 4 5 9 0 4 0 9 0 5 8 6 2 9 8 4 9 6 7 9 1 2 8 7 4 0 6 8 7 0 5 0 4 8 9 5 8 5 8 6 7 1 7 4 7 9 8 5 4 6 6 7 7 5 7 5 7 3 2 0 5 6 8 1 2 8 8 4 5 9 2 0 5 4 1 3 3 4 0 5 3 9 2 2 0 0 0 1 1 3 7 8 6 3 0 0 9 4 5 5 6 0 6 8 8 1 6 6 7 4 0 0 1 6 9 8 4 2 0 5 5 8 0 4 0 3 3 6 3 7 9 5 3 7 6 4 5 2 0 3 0 4 0 2 4 3 2 2 5 6 6 1 3 5 2 7 8 3 6 9 5 1 1 7 7 8 8 3 8 6 3 8 7 4 4 3 9 6 6 2 5 3 2 2 4 9 8 5 0 6 5 4 9 9 5 8 8 6 2 3 4 2 8 1 8 9 9 7 0 7 7 3 3 2 7 6 1 7 1 7 8 3 9 2 8 0 3 4 9 4 6 5 0 1 4 3 4 5 5 8 8 9 7 0 7 1 9 4 2 5 8 6 3 9 8 7 7 2 7 5 4 7 1 0 9 6 2 9 5 3 7 4 1 5 2 1 1 1 5 1 3 6 8 3 5 0 6 2 7 5 2 6 0 2 3 2 6 4 8 4 7 2 8 7 0 3 9 2 0 7 6 4 3 1 0 0 5 9 5 8 4 1 1 6 6 1 2 0 5 4 5 2 9 7 0 3 0 2 3 6 4 7 2 5 4 9 2 9 6 6 6 9 3 8 1 1 5 1 3 7 3 2 2 7 5 3 6 4 5 0 9 8 8 8 9 0 3 1 3 6 0 2 0 5 7 2 4 8 1 7 6 5 8 5 1 1 8 0 6 3 0 3 6 4 4 2 8 1 2 3 1 4 9 6 5 5 0 7 0 4 7 5 1 0 2 5 4 4 6 5 0 1 1 7 2 7 2 1 1 5 5 5 1 9 4 8 6 6 8 5 0 8 0 0 3 6 8 5 3 2 2 8 1 8 3 1 5 2 1 9 6 0 0 3 7 3 5 6 2 5 2 7 9 4 4 9 5 1 5 8 2 8 4 1 8 8 2 9 4 7 8 7 6 1 0 8 5 2 6 3 9 8 1 3 9 5 5 9 9 0 0 6 7 3 7 6 4 8 2 9 2 2 4 4 3 7 5 2 8 7 1 8 4 6 2 4 5 7 8 0 3 6 1 9 2 9 8 1 9 7 1 3 9 9 1 4 7 5 6 4 4 8 8 2 6 2 6 0 3 9 0 3 3 8 1 4 4 1 8 2 3 2 6 2 5 1 5 0 9 7 4 8 2 7 9 8 7 7 7 9 9 6 4 3 7 3 0 8 9 9 7 0 3 8 8 8 6 7 7 8 2 2 7 1 3 8 3 6 0 5 7 7 2 9 7 8 8 2 4 1 2 5 6 1 1 9 0 7 1 7 6 6 3 9 4 6 5 0 7 0 6 3 3 0 4 5 2 7 9 5 4 6 6 1 8 5 5 0 9 6 6 6 6 1 8 5 6 6 4 7 0 9 7 1 1 3 4 4 4 7 4 0 1 6 0 7 0 4 6 2 6 2 1 5 6 8 0 7 1 7 4 8 1 8 7 7 8 4 4 3 7 1 4 3 6 9 8 8 2 1 8 5 5 9 6 7 0 9 5 9 1 0 2 5 9 6 8 6 2 0 0 2 3 5 3 7 1 8 5 8 8 7 4 8 5 6 9 6 5 2 2 0 0 0 5 0 3 1 1 7 3 4 3 9 2 0 7 3 2 1 1 3 9 0 8 0 3 2 9 3 6 3 4 4 7 9 7 2 7 3 5 5 9 5 5 2 7 7 3 4 9 0 7 1 7 8 3 7 9 3 4 2 1 6 3 7 0 1 2 0 5 0 0 5 4 5 1 3 2 6 3 8 3 5 4 4 0 0 0 1 8 6 3 2 3 9 9 1 4 9 0 7 0 5 4 7 9 7 7 8 0 5 6 6 9 7 8 5 3 3 5 8 0 4 8 9 6 6 9 0 6 2 9 5 1 1 9 4 3 2 4 7 3 0 9 9 5 8 7 6 5 5 2 3 6 8 1 2 8 5 9 0 4 1 3 8 3 2 4 1 1 6 0 7 2 2 6 0 2 9 9 8 3 3 0 5 3 5 3 7 0 8 7 6 1 3 8 9 3 9 6 3 9 1 7 7 9 5 7 4 5 4 0 1 6 1 3 7 2 2 3 6 1 8 7 8 9 3 6 5 2 6 0 5 3 8 1 5 5 8 4 1 5 8 7 1 8 6 9 2 5 5 3 8 6 0 6 1 6 4 7 7 9 8 3 4 0 2 5 4 3 5 1 2 8 4 3 9 6 1 2 9 4 6 0 3 5 2 9 1 3 3 2 5 9 4 2 7 9 4 9 0 4 3 3 7 2 9 9 0 8 5 7 3 1 5 8 0 2 9 0 9 5 8 6 3 1 3 8 2 6 8 3 2 9 1 4 7 7 1 1 6 3 9 6 3 3 7 0 9 2 4 0 0 3 1 6 8 9 4 5 8 6 3 6 0 6 0 6 4 5 8 4 5 9 2 5 1 2 6 9 9 4 6 5 5 7 2 4 8 3 9 1 8 6 5 6 4 2 0 9 7 5 2 6 8 5 0 8 2 3 0 7 5 4 4 2 5 4 5 9 9 3 7 6 9 1 7 0 4 1 9 7 7 7 8 0 0 8 5 3 6 2 7 3 0 9 4 1 7 1 0 1 6 3 4 3 4 9 0 7 6 9 6 4 2 3 7 2 2 2 9 4 3 5 2 3 6 6 1 2 5 5 7 2 5 0 8 8 1 4 7 7 9 2 2 3 1 5 1 9 7 4 7 7 8 0 6 0 5 6 9 6 7 2 5 3 8 0 1 7 1 8 0 7 7 6 3 6 0 3 4 6 2 4 5 9 2 7 8 7 7 8 4 6 5 8 5 0 6 5 6 0 5 0 7 8 0 8 4 4 2 1 1 5 2 9 6 9 7 5 2 1 8 9 0 8 7 4 0 1 9 6 6 0 9 0 6 6 5 1 8 0 3 5 1 6 5 0 1 7 9 2 5 0 4 6 1 9 5 0 1 3 6 6 5 8 5 4 3 6 6 3 2 7 1 2 5 4 9 6 3 9 9 0 8 5 4 9 1 4 4 2 0 0 0 1 4 5 7 4 7 6 0 8 1 9 3 0 2 2 1 2 0 6 6 0 2 4 3 3 0 0 9 6 4 1 2 7 0 4 8 9 4 3 9 0 3 9 7 1 7 7 1 9 5 1 8 0 6 9 9 0 8 6 9 9 8 6 0 6 6 3 6 5 8 3 2 3 2 2 7 8 7 0 9 3 7 6 5 0 2 2 6 0 1 4 9 2 9 1 0 1 1 5 1 7 1 7 7 6 3 5 9 4 4 6 0 2 0 2 3 2 4 9 3 0 0 2 8 0 4 0 1 8 6 7 7 2 3 9 1 0 2 8 8 0 9 7 8 6 6 6 0 5 6 5 1 1 8 3 2 6 0 0 4 3 6 8 8 5 0 8 8 1 7 1 5 7 2 3 8 6 6 9 8 4 2 2 4 2 2 0 1 0 2 4 9 5 0 5 5 1 8 8 1 6 9 4 8 0 3 2 2 1 0 0 2 5 1 5 4 2 6 4 9 4 6 3 9 8 1 2 8 7 3 6 7 7 6 5 8 9 2 7 6 8 8 1 6 3 5 9 8 3 1 2 4 7 7 8 8 6 5 2 0 1 4 1 1 7 4 1 1 0 9 1 3 6 0 1 1 6 4 9 9 5 0 7 6 6 2 9 0 7 7 9 4 3 6 4 6 0 0 5 8 5 1 9 4 1 9 9 8 5 6 0 1 6 2 6 4 7 9 0 7 6 1 5 3 2 1 0 3 8 7 2 7 5 5 7 1 2 6 9 9 2 5 1 8 2 7 5 6 8 7 9 8 9 3 0 2 7 6 1 7 6 1 1 4 6 1 6 2 5 4 9 3 5 6 4 9 5 9 0 3 7 9 8 0 4 5 8 3 8 1 8 2 3 2 3 3 6 8 6 1 2 0 1 6 2 4 3 7 3 6 5 6 9 8 4 6 7 0 3 7 8 5 8 5 3 3 0 5 2 7 5 8 3 3 3 3 7 9 3 9 9 0 7 5 2 1 6 6 0 6 9 2 3 8 0 5 3 3 6 9 8 8 7 9 5 6 5 1 3 7 2 8 5 5 9 3 8 8 3 4 9 9 8 9 4 7 0 7 4 1 6 1 8 1 5 5 0 1 2 5 3 9 7 0 6 4 6 4 8 1 7 1 9 4 6 7 0 8 3 4 8 1 9 7 2 1 4 4 8 8 8 9 8 7 9 0 6 7 6 5 0 3 7 9 5 9 0 3 6 6 9 6 7 2 4 9 4 9 9 2 5 4 5 2 7 9 0 3 3 7 2 9 6 3 6 1 6 2 6 5 8 9 7 6 0 3 9 4 9 8 5 7 6 7 4 1 3 9 7 3 5 9 4 4 1 0 2 3 7 4 4 3 2 9 7 0 9 3 5 5 4 7 7 9 8 2 6 2 9 6 1 4 5 9 1 4 4 2 9 3 6 4 5 1 4 2 8 6 1 7 1 5 8 5 8 7 3 3 9 7 4 6 7 9 1 8 9 7 5 7 1 2 1 1 9 5 6 1 8 7 3 8 5 7 8 3 6 4 4 7 5 8 4 4 8 4 2 3 5 5 5 5 8 1 0 5 0 0 2 5 6 1 1 4 9 2 3 9 1 5 1 8 8 9 3 0 9 9 4 6 3 4 2 8 4 1 3 9 3 6 0 8 0 3 8 3 0 9 1 6 6 2 8 1 8 8 1 1 5 0 3 7 1 5 2 8 4 9 6 7 0 5 9 7 4 1 6 2 5 6 2 8 2 3 6 0 9 2 1 6 8 0 7 5 1 5 0 1 7 7 7 2 5 3 8 7 4 0 2 5 6 4 2 5 3 4 7 0 8 7 9 0 8 9 1 3 7 2 9 1 7 2 2 8 2 8 6 1 1 5 1 5 9 1 5 6 8 3 7 2 5 2 4 1 6 3 0 7 7 2 2 5 4 4 0 6 3 3 7 8 7 5 9 3 1 0 5 9 8 2 6 7 6 0 9 4 4 2 0 3 2 6 1 9 2 4 2 8 5 3 1 7 0 1 8 7 8 1 7 7 2 9 6 0 2 3 5 4 1 3 0 6 0 6 7 2 1 3 6 0 4 6 0 0 0 3 8 9 6 6 1 0 9 3 6 4 7 0 9 5 1 4 1 4 1 7 1 8 5 7 7 7 0 1 4 1 8 0 6 0 6 4 4 3 6 3 6 8 1 5 4 6 4 4 4 0 0 5 3 3 1 6 0 8 7 7 8 3 1 4 3 1 7 4 4 4 0 8 1 1 9 4 9 4 2 2 9 7 5 5 9 9 3 1 4 0 1 1 8 8 8 6 8 3 3 1 4 8 3 2 8 0 2 7 0 6 5 5 3 8 3 3 0 0 4 6 9 3 2 9 0 1 1 5 7 4 4 1 4 7 5 6 3 1 3 9 9 9 7 2 2 1 7 0 3 8 0 4 6 1 7 0 9 2 8 9 4 5 7 9 0 9 6 2 7 1 6 6 2 2 6 0 7 4 0 7 1 8 7 4 9 9 7 5 3 5 9 2 1 2 7 5 6 0 8 4 4 1 4 7 3 7 8 2 3 3 0 3 2 7 0 3 3 0 1 6 8 2 3 7 1 9 3 6 4 8 0 0 2 1 7 3 2 8 5 7 3 4 9 3 5 9 4 7 5 6 4 3 3 4 1 2 9 9 4 3 0 2 4 8 5 0 2 3 5 7 3 2 2 1 4 5 9 7 8 4 3 2 8 2 6 4 1 4 2 1 6 8 4 8 7 8 7 2 1 6 7 3 3 6 7 0 1 0 6 1 5 0 9 4 2 4 3 4 5 6 9 8 4 4 0 1 8 7 3 3 1 2 8 1 0 1 0 7 9 4 5 1 2 7 2 2 3 7 3 7 8 8 6 1 2 6 0 5 8 1 6 5 6 6 8 0 5 3 7 1 4 3 9 6 1 2 7 8 8 8 7 3 2 5 2 7 3 7 3 8 9 0 3 9 2 8 9 0 5 0 6 8 6 5 3 2 4 1 3 8 0 6 2 7 9 6 0 2 5 9 3 0 3 8 7 7 2 7 6 9 7 7 8 3 7 9 2 8 6 8 4 0 9 3 2 5 3 6 5 8 8 0 7 3 3 9 8 8 4 5 7 2 1 8 7 4 6 0 2 1 0 0 5 3 1 1 4 8 3 3 5 1 3 2 3 8 5 0 0 4 7 8 2 7 1 6 9 3 7 6 2 1 8 0 0 4 9 0 4 7 9 5 5 9 7 9 5 9 2 9 0 5 9 1 6 5 5 4 7 0 5 0 5 7 7 7 5 1 4 3 0 8 1 7 5 1 1 2 6 9 8 9 8 5 1 8 8 4 0 8 7 1 8 5 6 4 0 2 6 0 3 5 3 0 5 5 8 3 7 3 7 8 3 2 4 2 2 9 2 4 1 8 5 6 2 5 6 4 4 2 5 5 0 2 2 6 7 2 1 5 5 9 8 0 2 7 4 0 1 2 6 1 7 9 7 1 9 2 8 0 4 7 1 3 9 6 0 0 6 8 9 1 6 3 8 2 8 6 6 5 2 7 7 0 0 9 7 5 2 7 6 7 0 6 9 7 7 7 0 3 6 4 3 9 2 6 0 2 2 4 3 7 2 8 4 1 8 4 0 8 8 3 2 5 1 8 4 8 7 7 0 4 7 2 6 3 8 4 4 0 3 7 9 5 3 0 1 6 6 9 0 5 4 6 5 9 3 7 4 6 1 6 1 9 3 2 3 8 4 0 3 6 3 8 9 3 1 3 1 3 6 4 3 2 7 1 3 7 6 8 8 8 4 1 0 2 6 8 1 1 2 1 9 8 9 1 2 7 5 2 2 3 0 5 6 2 5 6 7 5 6 2 5 4 7 0 1 7 2 5 0 8 6 3 4 9 7 6 5 3 6 7 2 8 8 6 0 5 9 6 6 7 5 2 7 4 0 8 6 8 6 2 7 4 0 7 9 1 2 8 5 6 5 7 6 9 9 6 3 1 3 7 8 9 7 5 3 0 3 4 6 6 0 6 1 6 6 6 9 8 0 4 2 1 8 2 6 7 7 2 4 5 6 0 5 3 0 6 6 0 7 7 3 8 9 9 6 2 4 2 1 8 3 4 0 8 5 9 8 8 2 0 7 1 8 6 4 6 8 2 6 2 3 2 1 5 0 8 0 2 8 8 2 8 6 3 5 9 7 4 6 8 3 9 6 5 4 3 5 8 8 5 6 6 8 5 5 0 3 7 7 3 1 3 1 2 9 6 5 8 7 9 7 5 8 1 0 5 0 1 2 1 4 9 1 6 2 0 7 6 5 6 7 6 9 9 5 0 6 5 9 7 1 5 3 4 4 7 6 3 4 7 0 3 2 0 8 5 3 2 1 5 6 0 3 6 7 4 8 2 8 6 0 8 3 7 8 6 5 6 8 0 3 0 7 3 0 6 2 6 5 7 6 3 3 4 6 9 7 7 4 2 9 5 6 3 4 6 4 3 7 1 6 7 0 9 3 9 7 1 9 3 0 6 0 8 7 6 9 6 3 4 9 5 3 2 8 8 4 6 8 3 3 6 1 3 0 3 8 8 2 9 4 3 1 0 4 0 8 0 0 2 9 6 8 7 3 8 6 9 1 1 7 0 6 6 6 6 6 1 4 6 8 0 0 0 1 5 1 2 1 1 4 3 4 4 2 2 5 6 0 2 3 8 7 4 4 7 4 3 2 5 2 5 0 7 6 9 3 8 7 0 7 7 7 7 5 1 9 3 2 9 9 9 4 2 1 3 7 2 7 7 2 1 1 2 5 8 8 4 3 6 0 8 7 1 5 8 3 4 8 3 5 6 2 6 9 6 1 6 6 1 9 8 0 5 7 2 5 2 6 6 1 2 2 0 6 7 9 7 5 4 0 6 2 1 0 6 2 0 8 0 6 4 9 8 8 2 9 1 8 4 5 4 3 9 5 3 0 1 5 2 9 9 8 2 0 9 2 5 0 3 0 0 5 4 9 8 2 5 7 0 4 3 3 9 0 5 5 3 5 7 0 1 6 8 6 5 3 1 2 0 5 2 6 4 9 5 6 1 4 8 5 7 2 4 9 2 5 7 3 8 6 2 0 6 9 1 7 4 0 3 6 9 5 2 1 3 5 3 3 7 3 2 5 3 1 6 6 6 3 4 5 4 6 6 5 8 8 5 9 7 2 8 6 6 5 9 4 5 1 1 3 6 4 4 1 3 7 0 3 3 1 3 9 3 6 7 2 1 1 8 5 6 9 5 5 3 9 5 2 1 0 8 4 5 8 4 0 7 2 4 4 3 2 3 8 3 5 5 8 6 0 6 3 1 0 6 8 0 6 9 6 4 9 2 4 8 5 1 2 3 2 6 3 2 6 9 9 5 1 4 6 0 3 5 9 6 0 3 7 2 9 7 2 5 3 1 9 8 3 6 8 4 2 3 3 6 3 9 0 4 6 3 2 1 3 6 7 1 0 1 1 6 1 9 2 8 2 1 7 1 1 1 5 0 2 8 2 8 0 1 6 0 4 4 8 8 0 5 8 8 0 2 3 8 2 0 3 1 9 8 1 4 9 3 0 9 6 3 6 9 5 9 6 7 3 5 8 3 2 7 4 2 0 2 4 9 8 8 2 4 5 6 8 4 9 4 1 2 7 3 8 6 0 5 6 6 4 9 1 3 5 2 5 2 6 7 0 6 0 4 6 2 3 4 4 5 0 5 4 9 2 2 7 5 8 1 1 5 1 7 0 9 3 1 4 9 2 1 8 7 9 5 9 2 7 1 8 0 0 1 9 4 0 9 6 8 8 6 6 9 8 6 8 3 7 0 3 7 3 0 2 2 0 0 4 7 5 3 1 4 3 3 8 1 8 1 0 9 2 7 0 8 0 3 0 0 1 7 2 0 5 9 3 5 5 3 0 5 2 0 7 0 0 7 0 6 0 7 2 2 3 3 9 9 9 4 6 3 9 9 0 5 7 1 3 1 1 5 8 7 0 9 9 6 3 5 7 7 7 3 5 9 0 2 7 1 9 6 2 8 5 0 6 1 1 4 6 5 1 4 8 3 7 5 2 6 2 0 9 5 6 5 3 4 6 7 1 3 2 9 0 0 2 5 9 9 4 3 9 7 6 6 3 1 1 4 5 4 5 9 0 2 6 8 5 8 9 8 9 7 9 1 1 5 8 3 7 0 9 3 4 1 9 3 7 0 4 4 1 1 5 5 1 2 1 9 2 0 1 1 7 1 6 4 8 8 0 5 6 6 9 4 5 9 3 8 1 3 1 1 8 3 8 4 3 7 6 5 6 2 0 6 2 7 8 4 6 3 1 0 4 9 0 3 4 6 2 9 3 9 5 0 0 2 9 4 5 8 3 4 1 1 6 4 8 2 4 1 1 4 9 6 9 7 5 8 3 2 6 0 1 1 8 0 0 7 3 1 6 9 9 4 3 7 3 9 3 5 0 6 9 6 6 2 9 5 7 1 2 4 1 0 2 7 3 2 3 9 1 3 8 7 4 1 7 5 4 9 2 3 0 7 1 8 6 2 4 5 4 5 4 3 2 2 2 0 3 9 5 5 2 7 3 5 2 9 5 2 4 0 2 4 5 9 0 3 8 0 5 7 4 4 5 0 2 8 9 2 2 4 6 8 8 6 2 8 5 3 3 6 5 4 2 2 1 3 8 1 5 7 2 2 1 3 1 1 6 3 2 8 8 1 1 2 0 5 2 1 4 6 4 8 9 8 0 5 1 8 0 0 9 2 0 2 4 7 1 9 3 9 1 7 1 0 5 5 5 3 9 0 1 1 3 9 4 3 3 1 6 6 8 1 5 1 5 8 2 8 8 4 3 6 8 7 6 0 6 9 6 1 1 0 2 5 0 5 1 7 1 0 0 7 3 9 2 7 6 2 3 8 5 5 5 3 3 8 6 2 7 2 5 5 3 5 3 8 8 3 0 9 6 0 6 7 1 6 4 4 6 6 2 3 7 0 9 2 2 6 4 6 8 0 9 6 7 1 2 5 4 0 6 1 8 6 9 5 0 2 1 4 3 1 7 6 2 1 1 6 6 8 1 4 0 0 9 7 5 9 5 2 8 1 4 9 3 9 0 7 2 2 2 6 0 1 1 1 2 6 8 1 1 5 3 1 0 8 3 8 7 3 1 7 6 1 7 3 2 3 2 3 5 2 6 3 6 0 5 8 3 8 1 7 3 1 5 1 0 3 4 5 9 5 7 3 6 5 3 8 2 2 3 5 3 4 9 9 2 9 3 5 8 2 2 8 3 6 8 5 1 0 0 7 8 1 0 8 8 4 6 3 4 3 4 9 9 8 3 5 1 8 4 0 4 4 5 1 7 0 4 2 7 0 1 8 9 3 8 1 9 9 4 2 4 3 4 1 0 0 9 0 5 7 5 3 7 6 2 5 7 7 6 7 5 7 1 1 1 8 0 9 0 0 8 8 1 6 4 1 8 3 3 1 9 2 0 1 9 6 2 6 2 3 4 1 6 2 8 8 1 6 6 5 2 1 3 7 4 7 1 7 3 2 5 4 7 7 7 2 7 7 8 3 4 8 8 7 7 4 3 6 6 5 1 8 8 2 8 7 5 2 1 5 6 6 8 5 7 1 9 5 0 6 3 7 1 9 3 6 5 6 5 3 9 0 3 8 9 4 4 9 3 6 6 4 2 1 7 6 4 0 0 3 1 2 1 5 2 7 8 7 0 2 2 2 3 6 6 4 6 3 6 3 5 7 5 5 5 0 3 5 6 5 5 7 6 9 4 8 8 8 6 5 4 9 5 0 0 2 7 0 8 5 3 9 2 3 6 1 7 1 0 5 5 0 2 1 3 1 1 4 7 4 1 3 7 4 4 1 0 6 1 3 4 4 4 5 5 4 4 1 9 2 1 0 1 3 3 6 1 7 2 9 9 6 2 8 5 6 9 4 8 9 9 1 9 3 3 6 9 1 8 4 7 2 9 4 7 8 5 8 0 7 2 9 1 5 6 0 8 8 5 1 0 3 9 6 7 8 1 9 5 9 4 2 9 8 3 3 1 8 6 4 8 0 7 5 6 0 8 3 6 7 9 5 5 1 4 9 6 6 3 6 4 4 8 9 6 5 5 9 2 9 4 8 1 8 7 8 5 1 7 8 4 0 3 8 7 7 3 3 2 6 2 4 7 0 5 1 9 4 5 0 5 0 4 1 9 8 4 7 7 4 2 0 1 4 1 8 3 9 4 7 7 3 1 2 0 2 8 1 5 8 8 6 8 4 5 7 0 7 2 9 0 5 4 4 0 5 7 5 1 0 6 0 1 2 8 5 2 5 8 0 5 6 5 9 4 7 0 3 0 4 6 8 3 6 3 4 4 5 9 2 6 5 2 5 5 2 1 3 7 0 0 8 0 6 8 7 5 2 0 0 9 5 9 3 4 5 3 6 0 7 3 1 6 2 2 6 1 1 8 7 2 8 1 7 3 9 2 8 0 7 4 6 2 3 0 9 4 6 8 5 3 6 7 8 2 3 1 0 6 0 9 7 9 2 1 5 9 9 3 6 0 0 1 9 9 4 6 2 3 7 9 9 3 4 3 4 2 1 0 6 8 7 8 1 3 4 9 7 3 4 6 9 5 9 2 4 6 4 6 9 7 5 2 5 0 6 2 4 6 9 5 8 6 1 6 9 0 9 1 7 8 5 7 3 9 7 6 5 9 5 1 9 9 3 9 2 9 9 3 9 9 5 5 6 7 5 4 2 7 1 4 6 5 4 9 1 0 4 5 6 8 6 0 7 0 2 0 9 9 0 1 2 6 0 6 8 1 8 7 0 4 9 8 4 1 7 8 0 7 9 1 7 3 9 2 4 0 7 1 9 4 5 9 9 6 3 2 3 0 6 0 2 5 4 7 0 7 9 0 1 7 7 4 5 2 7 5 1 3 1 8 6 8 0 9 9 8 2 2 8 4 7 3 0 8 6 0 7 6 6 5 3 6 8 6 6 8 5 5 5 1 6 4 6 7 7 0 2 9 1 1 3 3 6 8 2 7 5 6 3 1 0 7 2 2 3 3 4 6 7 2 6 1 1 3 7 0 5 4 9 0 7 9 5 3 6 5 8 3 4 5 3 8 6 3 7 1 9 6 2 3 5 8 5 6 3 1 2 6 1 8 3 8 7 1 5 6 7 7 4 1 1 8 7 3 8 5 2 7 7 2 2 9 2 2 5 9 4 7 4 3 3 7 3 7 8 5 6 9 5 5 3 8 4 5 6 2 4 6 8 0 1 0 1 3 9 0 5 7 2 7 8 7 1 0 1 6 5 1 2 9 6 6 6 3 6 7 6 4 4 5 1 8 7 2 4 6 5 6 5 3 7 3 0 4 0 2 4 4 3 6 8 4 1 4 0 8 1 4 4 8 8 7 3 2 9 5 7 8 4 7 3 4 8 4 9 0 0 0 3 0 1 9 4 7 7 8 8 8 0 2 0 4 6 0 3 2 4 6 6 0 8 4 2 8 7 5 3 5 1 8 4 8 3 6 4 9 5 9 1 9 5 0 8 2 8 8 8 3 2 3 2 0 6 5 2 2 1 2 8 1 0 4 1 9 0 4 4 8 0 4 7 2 4 7 9 4 9 2 9 1 3 4 2 2 8 4 9 5 1 9 7 0 0 2 2 6 0 1 3 1 0 4 3 0 0 6 2 4 1 0 7 1 7 9 7 1 5 0 2 7 9 3 4 3 3 2 6 3 4 0 7 9 9 5 9 6 0 5 3 1 4 4 6 0 5 3 2 3 0 4 8 8 5 2 8 9 7 2 9 1 7 6 5 9 8 7 6 0 1 6 6 6 7 8 1 1 9 3 7 9 3 2 3 7 2 4 5 3 8 5 7 2 0 9 6 0 7 5 8 2 2 7 7 1 7 8 4 8 3 3 6 1 6 1 3 5 8 2 6 1 2 8 9 6 2 2 6 1 1 8 1 2 9 4 5 5 9 2 7 4 6 2 7 6 7 1 3 7 7 9 4 4 8 7 5 8 6 7 5 3 6 5 7 5 4 4 8 6 1 4 0 7 6 1 1 9 3 1 1 2 5 9 5 8 5 1 2 6 5 5 7 5 9 7 3 4 5 7 3 0 1 5 3 3 3 6 4 2 6 3 0 7 6 7 9 8 5 4 4 3 3 8 5 7 6 1 7 1 5 3 3 3 4 6 2 3 2 5 2 7 0 5 7 2 0 0 5 3 0 3 9 8 8 2 8 9 4 9 9 0 3 4 2 5 9 5 6 6 2 3 2 9 7 5 7 8 2 4 8 8 7 3 5 0 2 9 2 5 9 1 6 6 8 2 5 8 9 4 4 5 6 8 9 4 6 5 5 9 9 2 6 5 8 4 5 4 7 6 2 6 9 4 5 2 8 7 8 0 5 1 6 5 0 1 7 2 0 6 7 4 7 8 5 4 1 7 8 8 7 9 8 2 2 7 6 8 0 6 5 3 6 6 5 0 6 4 1 9 1 0 9 7 3 4 3 4 5 2 8 8 7 8 3 3 8 6 2 1 7 2 6 1 5 6 2 6 9 5 8 2 6 5 4 4 7 8 2 0 5 6 7 2 9 8 7 7 5 6 4 2 6 3 2 5 3 2 1 5 9 4 2 9 4 4 1 8 0 3 9 9 4 3 2 1 7 0 0 0 0 9 0 5 4 2 6 5 0 7 6 3 0 9 5 5 8 8 4 6 5 8 9 5 1 7 1 7 0 9 1 4 7 6 0 7 4 3 7 1 3 6 8 9 3 3 1 9 4 6 9 0 9 0 9 8 1 9 0 4 5 0 1 2 9 0 3 0 7 0 9 9 5 6 6 2 2 6 6 2 0 3 0 3 1 8 2 6 4 9 3 6 5 7 3 3 6 9 8 4 1 9 5 5 5 7 7 6 9 6 3 7 8 7 6 2 4 9 1 8 8 5 2 8 6 5 6 8 6 6 0 7 6 0 0 5 6 6 0 2 5 6 0 5 4 4 5 7 1 1 3 3 7 2 8 6 8 4 0 2 0 5 5 7 4 4 1 6 0 3 0 8 3 7 0 5 2 3 1 2 2 4 2 5 8 7 2 2 3 4 3 8 8 5 4 1 2 3 1 7 9 4 8 1 3 8 8 5 5 0 0 7 5 6 8 9 3 8 1 1 2 4 9 3 5 3 8 6 3 1 8 6 3 5 2 8 7 0 8 3 7 9 9 8 4 5 6 9 2 6 1 9 9 8 1 7 9 4 5 2 3 3 6 4 0 8 7 4 2 9 5 9 1 1 8 0 7 4 7 4 5 3 4 1 9 5 5 1 4 2 0 3 5 1 7 2 6 1 8 4 2 0 0 8 4 5 5 0 9 1 7 0 8 4 5 6 8 2 3 6 8 2 0 0 8 9 7 7 3 9 4 5 5 8 4 2 6 7 9 2 1 4 2 7 3 4 7 7 5 6 0 8 7 9 6 4 4 2 7 9 2 0 2 7 0 8 3 1 2 1 5 0 1 5 6 4 0 6 3 4 1 3 4 1 6 1 7 1 6 6 4 4 8 0 6 9 8 1 5 4 8 3 7 6 4 4 9 1 5 7 3 9 0 0 1 2 1 2 1 7 0 4 1 5 4 7 8 7 2 5 9 1 9 9 8 9 4 3 8 2 5 3 6 4 9 5 0 5 1 4 7 7 1 3 7 9 3 9 9 1 4 7 2 0 5 2 1 9 5 2 9 0 7 9 3 9 6 1 3 7 6 2 1 1 0 7 2 3 8 4 9 4 2 9 0 6 1 6 3 5 7 6 0 4 5 9 6 2 3 1 2 5 3 5 0 6 0 6 8 5 3 7 6 5 1 4 2 3 1